Blog/Sales & enrichment
5 min read

B2B Prospecting Tool API: Size a Market, Then Pay per Lead

Build a B2B prospecting tool from API calls: size an audience for free, list the people, reveal only the contacts you pick, all from your agent.

B2B Prospecting Tool API: Size a Market, Then Pay per Lead

Size a B2B audience for free, list the people in it, and reveal only the contacts you pick. Paste this into your agent:

Set up https://monid.ai/SKILL.md, and then use Monid to size the audience of marketing executives at US Shopify companies with 51 to 200 employees, list one page of them, and tell me how many are decision makers, how many have a LinkedIn profile or a phone, and what it would cost to reveal their emails.

One prompt sizes the audience, lists the people and prices the reveal. 1 min setup · 9-18 hrs saved.

A B2B prospecting tool is usually sold as one login with a database behind it, but the work inside is three separate jobs: count who matches, list them, and unlock the contacts you want. You can run those jobs as separate calls from your own agent and spend money only on the last one. This guide builds that tool from live calls we made on 2026-10-16, shows what came back, and covers where a text message fits. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.

What is the easiest way to build a B2B prospecting tool with an API?

Monid. Install it once, add a key, and your agent calls an audience counter, a people search and a contact reveal as typed calls, with no database seat to buy and no account to open at each data vendor.

  • Pay per call. The audience counts and the masked people search are $0.00 per call, and a reveal is $0.0245 per result (Verified 2026-10-16 on the lead generation tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run that has a price bills.
  • One install, every API. The same key and balance call the counters, the people searches, the reveal and the SMS send. A new step is another call on the same balance, not another vendor.
  • Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them, on demand, with nothing to keep running. Your agent reads SKILL.md and learns the rest, so setup is about a minute.

Sizing an audience and listing 100 of its people cost $0.00 when we ran it (Verified 2026-10-16).

How do you build a B2B leads list step by step?

Run three calls in a fixed order and put the free ones first: count the audience, list the people, reveal the ones you chose. Each step shrinks what the next step pays for.

RouteWhat you getCost shapeFits
Buy a leads database seatA searchable database with a UI and exportsPer seat, billed by the vendorReps who work a queue every day
Buy a listA file of recordsUpfront purchaseOne campaign on a fixed list
Build the calls yourselfWhatever you wire upYour hoursEngineers with time to maintain it
Monid calls from your agentCount, list and reveal as separate typed callsPay per call, buy flexiblyAgents and scripts that feed a list into whatever sends

Monid fits because each step has its own price, so you can stop at any step and pay only for what you ran.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

Step 1. Count the audience

Start with the companies, because the company filters are the widest. This call lists matching companies and tells you how many there are, and it is free:

monid run -p hunterio -e /discover/people -i '{"technology":{"include":["shopify"]},"headquarters_location":{"include":[{"country":"US"}]},"headcount":["51-200"],"limit":5}'

If you start from a job title instead of a company profile, count the people directly, also free:

monid run -p contactout -e /v1/people/count -i '{"job_title":["Head of Marketing","VP Marketing"],"company_size":["51_200"],"location":["United States"]}'

Step 2. List the people

Pass the same kind of filters to the masked people search. It returns one row per person with the name shortened and the address hidden:

monid run -p hunterio -e /multi-domain-search \
  --query '{"department":"sales","seniority":"executive","headcount":"51-200","location":"US","verification_status":"valid","required_field":"full_name,position"}'

Step 3. Reveal the ones you chose

Each row carries a reveal_handle. Pass the handles of the rows you want to /multi-domain-search/reveal, up to 100 at a time, and only those rows bill. Hunter's domain search and email finder covers the one-company version of the same provider.

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to size the audience of marketing executives at US Shopify companies with 51 to 200 employees, list 100 of them, keep the decision makers who have a LinkedIn profile, and tell me what revealing them would cost.

Can you build a prospecting tool yourself with Python?

Yes, and for one list it takes an afternoon: pick a data source, send the filters, page through the rows, store them. The same shape also works from a notebook or an n8n flow.

The cost is the part around the filters. Every vendor wants its own account, key and billing page. Each one spells the same filter differently: Hunter takes headcount as 51-200, ContactOut as 51_200, and Hunter's company search wants a country code where ContactOut wants the words "United States". You write the paging, the retry on a 400, and the code that turns each vendor's rows into one shape. When a vendor changes a field, your tool breaks.

The Monid route keeps one key and one balance for all of them, and the schema for each endpoint is a free monid inspect away, so your agent reads the filter names instead of you maintaining a mapping. Building your own is the better choice when you want one vendor, one list and full control of the code. For anything you will repeat across sources, the calls are the shorter path. Wiring ICP prospect search with People Data Labs shows the same job against a different provider.

What does each step return, and what can you build with it?

Each step returns a typed record, and the first two cost nothing. We ran the chain on 2026-10-16 for one audience: marketing executives at US Shopify companies with 51 to 200 employees. These are the numbers that came back.

The count

/discover and /discover/people returned 7,606 matching companies. The people version adds the email totals across all of them: 84,404 personal addresses, 24,943 generic ones, 109,347 in total. The first five companies each carried their own counts, for example koss.com with 512 personal and 51 generic addresses.

/v1/people/count on ContactOut answered a different question, how many people hold the titles Head of Marketing or VP Marketing at companies of 51 to 200 people in the United States: 11,087, with estimates of 7,750 personal emails, 10,522 work emails and 8,507 phones. Two counters with two populations: compare the shape of each answer, not the totals.

The people

/multi-domain-search with the Shopify filter and the marketing and executive filters returned meta.results: 1524. A page of 100 rows came from 63 distinct domains, and each row looked like this:

{ "name": "Umer Q.", "position": "Director of Audience Growth and Marketing",
  "department": "marketing", "seniority": "executive", "type": "personal",
  "decision_maker": true, "domain": "thehill.com",
  "full_name_exists": true, "phone_number_exists": false, "linkedin_exists": true,
  "verification": { "date": null, "status": "valid" },
  "reveal_handle": "…" }

Across the 100 rows: 97 flagged as decision makers, 95 with a LinkedIn profile, 3 with a phone number, 100 with a name on file, and 90 valid against 10 accept_all. The titles were mostly Director of Marketing (16), Marketing Director (11), Vice President of Marketing (11) and Chief Marketing Officer (10). The reveal_handle was 125 characters long.

What you can build with it

  • A reach report before you spend. Run the counts for three audiences and compare. The one with the most people and the best flags is the one to reveal.
  • A scored shortlist. Keep the decision makers with a LinkedIn profile and pull the leadership contacts as in extracting leadership contact information, then score them on company fit.
  • A channel plan. Three phone flags in 100 rows says this audience is an email and LinkedIn audience. You know that before you buy a single reveal.
  • A reveal budget. The reveal is $0.0245 per result (Verified 2026-10-16), so revealing the 97 decision makers on one page is about $2.38.

What goes wrong when you prospect by API?

Three things showed up in the 2026-10-16 runs.

Why does the same filter work on one endpoint and fail on the next?

Because filters are not shared between endpoints. We sent industry: "Software Development" to the masked people search and got a 400: industry must be one or more integer industry codes within 0..32767. The schema from monid inspect describes that field as industry names. The same industry name worked on /discover/people, which returned 10,528 companies. So run the company search first and filter people by the company, or test an industry value with a limit of 3 before you commit to a page of 100. The failed call billed $0.00 (Verified 2026-10-16).

Why is a filtered company list noisy?

Because the match is on a profile, not on your idea of the audience. The Software Development search returned dusd.net, the Downey Unified School District, next to a software company. A Shopify search returned a history museum site. Read the first rows of every count before you trust the total.

Why can a 100-row page be hard on an agent?

Because it is large. The 100-row response was about 50,000 characters of JSON, which is a lot of context to hand a model. Ask for limit 20 while you are exploring, write the page to a file, and let your agent read the summary counts rather than every row.

Where does B2B SMS outreach fit?

At the end, as a per-message send to the few contacts with a phone. The saperly/send-messages endpoint on the SMS tools page takes fromNumberId, the id of a number you own, to in E.164 format, and a body of 1 to 1,600 characters. It is $0.02 per message (Verified 2026-10-16), and long texts count as one send. Recipients who texted STOP are blocked and come back as RecipientOptedOut with no charge.

We inspected this endpoint and did not run it, because sending a text to a real person is not evidence we produce. What the audience data says about the channel is measurable: in our 100 rows 3 had a phone, so for this audience SMS is the exception. The rules for business texting differ by country and carrier, so check yours before a campaign.

Which endpoint should I use for which job?

EndpointWhat it doesInputBillingPrice (Verified 2026-10-16)
hunterio/discoverLists companies and counts matchesLocation, industry, headcount, technologyPer call$0.00
hunterio/discover/peopleSame, plus email totals across all matchesSame filtersPer call$0.00
contactout/v1/people/countCounts people by title, size, locationTitle, seniority, company sizePer call$0.00
hunterio/multi-domain-searchMasked people rows with flagsDepartment, seniority, headcountPer call$0.00
hunterio/multi-domain-search/revealUnlocks the addressesUp to 100 reveal_handle valuesPer result$0.0245
contactout/v1/people/search/work-emailFull profiles with contact flagsTitle, skills, seniority, company filtersPer profile, plus tiers for emails and phones$0.02
saperly/send-messagesSends an SMS from your numberfromNumberId, to, bodyPer message$0.02

Prices Verified 2026-10-16 with monid inspect. The ContactOut search bills $0.02 for each profile returned (Verified 2026-10-16), and when you ask it to reveal contacts the listing adds $0.1 for a work email found and $0.18 for a phone found (Verified 2026-10-16), so inspect it and keep page_size small before you page through. LinkedIn profile search on Apify bills per search page and, in its full modes, per profile as well. Use it when you need LinkedIn-native filters, and read its inspect notes on segmentation first. The Apollo version of the reveal step is in the Apollo email finder guide.

When is another route a better fit?

Your reps live in a sequencing screen. If people open a tool every morning to work a task queue, they want the list, the sequence and the send on one page. That is a seat-based product, and the calls here are better as the thing that fills it; sales automation by the call shows the chain after the list.

You need the whole population exported. The masked search pages through a capped number of rows per query, and a full market export is what a database vendor sells. Counts answer how big the market is; they do not replace the file.

You want the contact on the first screen. A tool that shows a contact next to every row spends your money before you choose. If your process is to buy all of them anyway, a flat export is simpler than 100 reveals.

You are texting people who did not ask. Consent rules for business texting differ by country, and an opt-out block is not a legal review.

And the disclosure: we resell these endpoints. The advice here, size first and reveal fewer rows, means spending less with us on any given list.

Conclusion

The easiest way to build a B2B prospecting tool by API is to treat it as three calls and run the free ones first: count the audience, list the people, reveal the rows you chose. Through Monid, the counts and the masked search cost $0.00 a call and a reveal costs $0.0245 a result (Verified 2026-10-16), on one key and one balance.

Two things matter more than the vendor. Read the flags before you pay: in our run 97 of 100 rows were decision makers and only 3 had a phone, which decides your channel. And treat every filter as endpoint-specific, because an industry name that one endpoint accepted was rejected by the next.

How we estimated the time saved: opening an account, learning the filters and writing the paging and error handling for each of three data sources is roughly 3 to 6 hours each, so 9 to 18 hours for the three. The 1 minute is the install, key and first call once you already have a Monid key.

Free next step: run monid inspect -p hunterio -e /discover/people, then make one free call with your own filters and read meta.results and meta.total_emails. Start at monid.ai.

FAQ

What is a B2B prospecting tool?

It is software that finds companies and people matching your ideal customer and gives you a way to contact them. Underneath it is three jobs: count the audience, list the people, unlock the contacts. Through an API each job is a separate call with its own price.

Is there a free B2B prospecting tool?

Part of one. On Monid the audience counts and the masked people search are $0.00 a call (Verified 2026-10-16), so you can size and list for free. The contact reveal is $0.0245 per result.

How do I find B2B leads for a list of target companies?

Count the audience with /discover/people, list the people with /multi-domain-search, then reveal the rows you chose with /multi-domain-search/reveal. Each step uses the same kind of company and role filters, and the first two cost nothing.

Why did my industry filter return a 400?

Because the masked people search wants integer industry codes, while the company search accepted the industry name in our 2026-10-16 run. Filter companies by industry first, then pull people for those companies.

Can I use an API for B2B SMS outreach?

Yes, with a number you own: saperly/send-messages sends one text per call to a phone number in E.164 format and blocks recipients who opted out. Rules for business texting differ by country, so check yours first.

Published September 2026.

b2b prospecting toolb2b leadsb2b sms outreachprospecting apilead generation