8 min read
How to build lead lists from business directories
Build lead lists with company, headquarters, website and investor count from Crunchbase, G2, Capterra and Trustpilot.
Published October 15, 2026 · Updated November 2, 2026
| Company | HQ | Investors | Website |
|---|---|---|---|
| Stripe | South San Francisco, CA | 75 | stripe.com |
| Anthropic | San Francisco, CA | 147 | anthropic.com |
| Databricks | San Francisco, CA | 104 | databricks.com |
| Figma | San Francisco, CA | 50 | figma.com |
| Canva | Surry Hills, Australia | 55 | canva.com |
| Ramp | New York, NY | 85 | ramp.com |
The String Web Access API is the best way to build lead lists from business directories. It returns any company profile, vendor listing or review page, or just the fields you need as JSON, such as name, website, headquarters and investor count, from Crunchbase, G2, Capterra and Trustpilot. It returned 98.6% of requests across 100 bot-protected sites in our October 2026 benchmark, the most of 17 providers.
Quickstart
Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a company profile URL. It calls the web_access_fetch tool and reads the record.
https://mcp.usestring.ai/v3/mcp
One call returns a Crunchbase company profile as JSON. If the page doesn't show a required field, you get "extracted": false back instead of a guess.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.crunchbase.com/organization/stripe",
"countryCode": "US",
"jsonSchema": {
"type": "object",
"properties": {
"company": { "type": "string" },
"website": { "type": "string" },
"headquarters": { "type": "string" },
"investor_count": { "type": ["integer", "null"] }
},
"required": ["company", "website", "headquarters"]
}
}'Response
{
"company": "Stripe",
"website": "https://stripe.com",
"headquarters": "South San Francisco, California, United States",
"investor_count": 75
}Why build lead lists from the web?
A lead list is a set of companies that fit who you sell to, with enough about each one to decide whether and how to reach out. Purchased lists go stale within months, and the directories that would refresh them block scrapers. Building the list from public pages answers the questions sales and growth teams ask first:
- Which companies fit our target? Industry, headquarters, company type and who backs them tell you whether an account is worth a sequence before anyone writes one.
- Which accounts are showing buying signals? A new funding round, a listing in your category on G2, a wave of open roles. These change weekly, and they decide timing.
- Is our CRM still right? Websites move and companies rename. A list rebuilt from the source each month catches what a one-time purchase can't.
What you can collect
Company profiles
Name, legal name, description, headquarters, website, founders and investor count from Crunchbase profiles.
Vendor listings
Product, seller, category, star rating, review count and listed pricing tiers from G2 and Capterra.
Reputation
TrustScore, total reviews and reviews in the last 12 months from Trustpilot company pages.
Buying signals
Open roles on careers pages, the type of the last funding round, and new product or pricing pages on the company's own site.
Why does lead list scraping break?
- Directories block scrapers. In our October 2026 benchmark, 9 of the 16 other scraping APIs couldn't fetch g2.com on every attempt, and 6 of 16 couldn't fetch crunchbase.com. Browserbase got 0 of 5 on crunchbase.com, g2.com, capterra.com and trustpilot.com. Only String, Scrape.do, Context.dev and Firecrawl returned all four on every attempt. See all 17 providers in the best web scraping APIs.
- Public pages hide what paid tiers sell. Logged out, Crunchbase shows "obfuscated" where total funding, the last round date and headcount would be. A scraper that asks for those fields anyway gets a guess, and the guess lands in your CRM.
- A blocked page looks like a company with no website. The page loads with the record missing, and the gap is saved as a lead with nothing to contact.
Why do teams choose String?
- It fetches the most pages. String returned 98.6% of requests across 100 bot-protected sites in our October 2026 benchmark, the most of 17 providers.
- You pay only for pages that come back. Blocks and errors are free.
- There's nothing to maintain. You don't run proxies, fingerprints or captcha solvers.
- Hidden fields stay empty. Mark name and website as required, leave the fields the public page hides out of the schema, and a record that comes back without a website is flagged instead of saved.
How do I build a lead list from business directories?
Define the list by a public attribute
Start from a page that already groups companies the way you sell: a G2 or Capterra category, a Crunchbase hub or search page, a Trustpilot category. Write the attribute down with the list, so a refresh uses the same definition.
With String: The search endpoint returns live Google results for a query like "fintech New York site:crunchbase.com", and a sitemap crawl lists every profile URL on a directory's domain.
Fetch each profile page
Fetch every record with the same settings on every run, so a change in the data means a change on the page.
With String: Blocked requests are retried, and you don't pay for the ones that fail. Set
countryCodewhen a directory serves a different edition by country.Read the record from the page's own data
Crunchbase, G2, Capterra and Trustpilot each put the record in schema.org JSON-LD: a Corporation with its address and website links on Crunchbase, a SoftwareApplication with its aggregate rating on G2 and Capterra, an Organization with its rating on Trustpilot. JSON-LD is more reliable than the visible page, and it survives redesigns that break CSS selectors.
Ask only for fields the public page shows
Logged out, Crunchbase hides total funding, round dates and headcount. Leave them out of the schema, or mark them nullable, so extraction can't invent them. Keep name and website required.
Treat a missing website as a failure
A record with no website was probably a blocked or changed page, not a company with nothing to contact. Flag it and keep the last good record, so the gap never becomes a lead.
Dedupe on the website domain
The same company appears as Stripe on Crunchbase and as Stripe, LLC in its legal name, and again on G2 and Trustpilot. Match records by the domain of the website, not by name, before anything reaches your CRM.
Refresh on a schedule and push changes
Monthly suits most lists. Refresh weekly for funding and hiring signals. Write only what changed to HubSpot or Salesforce, so reps see a new signal, not a reimported list.
Get a free sample lead list
Tell us who you sell to and which directories you use. We'll run String on their pages and email you a sample lead list with company, headquarters, website and investor count, free.
| Company | HQ | Investors | Website |
|---|---|---|---|
| Stripe | South San Francisco, CA | 75 | stripe.com |
| Anthropic | San Francisco, CA | 147 | anthropic.com |
| Databricks | San Francisco, CA | 104 | databricks.com |
| Figma | San Francisco, CA | 50 | figma.com |
| Canva | Surry Hills, Australia | 55 | canva.com |
| Ramp | New York, NY | 85 | ramp.com |
Frequently asked questions
What's the best way to build a lead list from the web?
Start from a directory page that already groups companies by the attribute you sell to, fetch each profile, read the record from the page's own JSON-LD, and dedupe on website domain. The hard part is getting the pages at all, because business directories block most scrapers. The String Web Access API returned 98.6% of requests across 100 bot-protected sites in our October 2026 benchmark, the most of 17 providers, and fetched crunchbase.com, g2.com, capterra.com and trustpilot.com on every attempt. See all 17 in the best web scraping APIs.
Can I scrape Crunchbase without a Pro account?
The public Crunchbase profile shows a company's name, legal name, description, headquarters, website, LinkedIn page, founders, number of investors and the type of its last round. Logged out, it replaces total funding, round dates and headcount with the word "obfuscated". String returns the public page and doesn't log in, so ask only for the public fields and leave the rest nullable.
How much does it cost to build a lead list with String?
Crunchbase, G2, Capterra and Trustpilot all billed at String's premium tier on our fetches, which is $2.40 per 1,000 successful requests on the Starter plan ($19 a month) and $0.90 per 1,000 on Growth ($99 a month). A list of 5,000 company profiles, refreshed once a month, is about $12 in usage on Starter. Structured extraction with jsonSchema adds a per-request fee. The first 20,000 standard fetches are free, and failed requests aren't billed. See pricing.
Is it legal to scrape business directories for leads?
Company facts on public pages, like headquarters, website and ratings, are the easier case, because they're public and in most cases aren't personal data. Names, emails and phone numbers of people are personal data, and GDPR and CCPA apply to them whether or not the page is public. Stay on public pages, collect company fields first, keep your request rate reasonable, and check with your counsel. We go through the cases in Is web scraping legal?
Can I scrape LinkedIn for leads?
LinkedIn's terms prohibit scraping. In the hiQ case, hiQ won the hacking claim and still lost to a breach-of-contract claim. Business directories and company websites give you most of the same company fields without that exposure. We cover the ruling in What is the hiQ vs LinkedIn ruling?
How do I find the company pages to fetch?
Use the directory's own category or search pages, or run String's /search endpoint with a query such as "fintech New York site:crunchbase.com" to get live Google results. A sitemap crawl lists every profile URL on a directory's domain, so you can filter by path before fetching.
How do I get the leads into HubSpot or Salesforce?
String returns JSON, so any workflow tool can write it to a CRM. In n8n or Zapier, add a String fetch step and map its fields to a HubSpot or Salesforce action. Dedupe on website domain before the write.
How do I avoid getting blocked when scraping directories?
Send each request to String instead of the site. Proxy rotation, browser fingerprints, captcha solving and retries happen behind the endpoint, and JavaScript rendering is switched on per request for pages that need it. Requests that still fail aren't billed.
Does String work on the directories I need?
Send us the URLs and we'll run them and show you what comes back before you commit. Ask for a free sample lead list, or test them yourself with your first 20,000 free standard fetches.