How to build a list of companies matching specific criteria
Abby Grills· CEO, RiveterPublished · Updated
Last reviewed Aug 2026.
The short answer: if every one of your criteria is a field a database already collects — industry, headcount, revenue band, funding, location — filter a database like Apollo or ZoomInfo and you’re done in an afternoon. If even one criterion isn’t a collected field, no filter exists for it at any price, and you need a tool that researches companies rather than looks them up.
Most list-building projects stall because nobody makes that distinction up front. Here’s how to tell which situation you’re in, and what to do in each.
Filters vs. research: the distinction that decides everything
A B2B database sells access to a dataset someone already assembled. You can filter on the fields they chose to collect. That’s genuinely powerful, and for a large share of list-building it’s the right answer — fast, cheap, and good enough.
But a filter can only exist for a field that was collected. And the criteria that actually define a target list are often not collected by anyone:
| Criterion | Filterable in a database? |
|---|---|
| SaaS companies, 50–200 employees, Series B, US | ✅ Yes — standard fields |
| Companies using Shopify | ⚠️ Sometimes — from a fixed detection list, homepage only |
| Companies that run their own fulfillment rather than a 3PL | ❌ No |
| Manufacturers with a facility in Ohio | ❌ No |
| Nonprofits using a specific payment processor | ❌ No |
| Clinics holding a specific accreditation | ❌ No |
| Companies hiring for a role that implies they need your product | ❌ No |
| Franchises with more than 20 locations, by state | ❌ No |
Everything in the bottom half exists publicly — on a careers page, a locations page, a state registry, a PDF filing, an accreditation directory. It just isn’t a column you can buy, because the audience for each one is a handful of companies.
If your list is defined by something in the bottom half, the question isn’t which database has better coverage. No amount of coverage produces a filter that doesn’t exist.
The four ways to build the list
1. Buy a prebuilt list
Works when: your criteria are standard and you need it today. Fails when: the list is stale on arrival, and it will be — companies move, grow, get acquired, and change tooling continuously. You’re also buying the same list your competitors bought.
2. Filter a database
Works when: every criterion maps to a collected field. Apollo is usually the cheapest way in and has a usable free tier; ZoomInfo is the enterprise version with deeper coverage and intent data. Fails when: any criterion doesn’t map, or when your segment is small private companies the database never ingested. Coverage on well-known companies is excellent; on the long tail it thins out, and the long tail is often exactly the segment you care about.
Worth knowing: filtering a database first is frequently the cheapest starting point even when it can’t finish the job. Narrow to a plausible universe there, then research the narrowed set for the criteria the database can’t answer. That’s cheaper than researching everything from scratch.
3. Research it manually
Works when: the list is under a few hundred companies and the criteria genuinely require judgment. Fails when: it doesn’t scale, it’s never refreshed, and the person doing it is usually the person whose time is most expensive. Most teams reading this are already doing some version of it and want out.
4. Generate the list from a description
Works when: you can describe the list in plain language but can’t express it as filters — which is most interesting lists.
Rather than filtering a stored dataset, an agentic system searches the live web, finds companies matching your description, and researches each one for the attributes you asked for. No seed list required.
This is what Riveter’s Dataset Builder does. You describe the dataset, its agents search and navigate to find matching companies, extract the fields you specified, and return the finished structured set. Because the research happens at request time, the criteria can be anything you can describe, and the results reflect the source as it is now rather than whenever a crawler last visited.
A worked example
Say the list you actually need is:
Every US company operating a plastic injection-molding facility, with the states each one operates in, whether they serve medical-device customers, and whether they hold ISO 13485 certification.
Try to build that from filters and you’ll get stuck immediately. “Plastic injection molding” might map to a SIC or NAICS code, roughly. The other three criteria map to nothing:
- States with facilities — on a locations page, sometimes only on a careers page, sometimes only inferable from job postings
- Serves medical device customers — on a case-studies or industries-served page
- ISO 13485 — on a certifications page, or a PDF certificate, or an accreditation body’s directory
A research approach handles this as a chain: find companies matching the description, visit each one’s site, check locations and careers pages for facility states, check industries-served pages for the medical-device signal, then verify certification against the certifying body rather than trusting a marketing claim. Each step’s answer determines what the next step looks for.
That’s the shape of most genuinely valuable lists: one filterable criterion and three that aren’t.
Can an API build a lead list from just a prompt?
Yes — this is worth calling out separately, because it’s asked as its own question and the answer isn’t obvious.
Riveter’s Dataset Builder is available through the API, so the whole flow — describe the list, get back structured rows — can run programmatically rather than in an interface. Configured datasets are the recurring version: you define the dataset and its output schema once, give it input variables, and call it repeatedly. Send in a conference name and year, get back every speaker, exhibitor, and sponsor. Send in a new market segment, get the same schema back for that segment.
Two things make this different from calling a search API and parsing the results:
- You get rows, not pages. The output is the structured dataset, in the schema you defined, not a ranked list of URLs to process.
- It runs the whole chain. Discovery, navigation, extraction, verification, and structuring happen inside one call rather than as four services you orchestrate.
The same workflow also accepts a single record at a time, so the definition that builds a 20,000-row dataset can also enrich one company live when it signs up.
How to choose
Filter a database if every criterion is a standard field, your targets are well-known companies, and you need it cheap and fast. Apollo is usually the cheapest way in; ZoomInfo is the enterprise version. Start here — it’s the lowest-cost path when it works.
Research from a description if any criterion isn’t a purchasable field, your segment is small or private companies, the list needs to stay current, or you need the complete set rather than whatever a database happens to hold. This is what Riveter’s Dataset Builder does — it takes the description, searches the live web for matching companies, and returns them with the attributes you asked for.
Do both if the universe is large: filter down first for cost efficiency, then research the narrowed list for the criteria that don’t exist as filters. This is usually the cheapest path to a genuinely differentiated list.
Keep doing it manually if the list is small, one-off, and the judgment is genuinely human. Not every list needs a system.
What to check before you commit to a tool
- Can it work without seed data? Building from a description is a different capability than enriching a list you already have.
- Are the criteria open-ended, or a fixed menu? This is the filters-vs-research question in product form.
- Completeness. When you ask for “all of them,” do you get the complete set or a capped subset? Several tools cap results per request.
- Verification. Does it check a claim against a second source, or accept the first page that mentions it?
- Refresh. Can the same definition re-run on a schedule, returning the identical schema?
- Long-tail coverage. Test on mid-market and private companies, not on the well-known names.
- Output shape. Structured rows ready to load, or documents you still have to process?
FAQ
How do I build a list of companies matching specific criteria?
If all your criteria are standard fields — industry, headcount, funding, location — filter a B2B database like Apollo or ZoomInfo. If any criterion isn’t a field somebody already collected, no filter exists for it, and you need a tool that researches companies on the live web instead. Riveter’s Dataset Builder takes a plain-language description, finds matching companies, and returns them with the attributes you asked for, including ones no database carries.
Is there an API that can build a lead list from scratch using just a prompt?
Yes. Riveter’s Dataset Builder is callable through its API: you describe the list you want and it returns structured rows, with no seed data required. Configured datasets are the recurring version — define the dataset and schema once, add input variables, and call it repeatedly, so sending in a new conference or segment returns the same structure every time.
How do I build a custom dataset of companies?
Describe the dataset — the companies you want and the fields you need for each — and use a tool that researches rather than filters, so the fields aren’t limited to a vendor’s schema. Define the output schema up front, verify at least the criteria that decide inclusion against a second source, and put it on a refresh schedule if the data ages.
Can I build a company list without buying a database?
Yes. Databases are one route, and the cheapest one when your criteria match their fields. If your criteria don’t, an agentic system that searches the live web can build the list from a description alone. Many teams use both: filter a database to narrow the universe cheaply, then research that shorter list for the criteria that aren’t purchasable.
How do I keep a company list from going stale?
Rebuild it rather than patch it. If the list was generated from a definition, re-running that definition on a schedule returns the current version in the same schema. Riveter’s monitoring re-runs the whole workflow — as often as every minute for extractions, every 15 minutes for enrichment monitors — and flags changes you’ve defined as meaningful.
What if the companies I want aren’t in any database?
That’s the common case for small private companies, regional operators, and niche industries, and it’s the strongest reason to research rather than filter. A database returns nothing for a company it never ingested; an agentic system that navigates the live web can find it wherever it exists publicly.
Describe the list you couldn’t build
Bring the criteria that aren’t a filter anywhere — the operational detail, the certification, the facility footprint — and see the list come back.
Related reading:
- The best data enrichment APIs — the three kinds, and which handles custom attributes
- How to qualify and enrich ICP accounts with web data
- Sales & GTM · Pricing · API docs
