ParseForge Scrapers

Dun & Bradstreet Company Scraper

parseforge/dnb-scraper

Lead generationOtherAutomation

Extract company data from the Dun & Bradstreet business directory. Returns DUNS number, employee count, revenue, industries, named contacts, location and corporate role: searchable by keyword, country, family-tree role and company size.

Run this scraper See the API call
Total users
47
Monthly active
6
Total runs
1.5K
Bookmarked
0
Rating
Not rated yet
Last modified
15 hours ago

Overview

ParseForge

Dun & Bradstreet Company Scraper - DUNS, Revenue & Employee Data

Scrape company profiles from the Dun & Bradstreet business directory by keyword or direct URL. Every company comes with its 9-digit DUNS number, employee count, annual revenue, industries, corporate role, named principal, and full address. No login or API key. Export to CSV, JSON, Excel, or XML.

D&B's official API needs a paid subscription, a contract, and strict usage limits. This reads the public company directory directly, filtered by country, family-tree role, and employee range, and returns each match in one fixed schema.

Who uses it What they scrape Dun & Bradstreet for
Sales and RevOps teams Prospect lists keyed by DUNS, with revenue and headcount for scoring
Market researchers Industry landscapes sized by revenue and employees
Recruiters Companies filtered by headcount and country for talent sourcing
Investors and analysts Screening private companies that file nothing publicly
Data teams DUNS numbers to reconcile CRM, ERP, and vendor records

What it does

This Actor collects Dun & Bradstreet company profiles by search query or direct URL, and returns each one as a flat row.

  • ๐Ÿ” Search query: a company name or keyword like "Apple" or "logistics" returns matching profiles.
  • ๐Ÿ”— Direct URLs: paste D&B company profile URLs to pull specific companies, or D&B search URLs to run their query.
  • ๐ŸŒ Country filter: restrict results to one country with an ISO Alpha-2 code like US, DE, or GB.
  • ๐Ÿข Family-tree role: parent, branch, subsidiary, domestic ultimate, or global ultimate.
  • ๐Ÿ‘ฅ Employee range: minimum and maximum headcount, applied by D&B before results are returned.
  • ๐Ÿ“Š Detail enrichment: one extra request per company adds the DUNS number, employee count, revenue, website, industries, ranks, and the named key principal.
  • ๐ŸŒ Split by country: re-runs a query once per country so a single keyword can return far more than the directory's 1,000-row-per-query ceiling.

What you can do with Dun & Bradstreet data

๐ŸŽฏ Build a scored B2B prospect list.

Search "software" with countryCode: US and minEmployees: 50, turn on detail enrichment, and every row lands with revenue and headcount to sort by.

๐Ÿ”‘ Reconcile records on DUNS.

Detail enrichment returns the real 9-digit DUNS number, which is the join key between your CRM, your ERP, and most vendor-risk databases.

๐Ÿ“ˆ Size an industry.

Scrape every match for "pharma" with Split by country, then aggregate revenue and employees by country and industry.

๐Ÿข Find the ultimate parent.

Set the family-tree role to Global Ultimate to list only top-of-tree entities, or Subsidiary to enumerate the branches under a group.

Why choose this scraper

What you get
No API key needed Reads public D&B directory pages, no registration or contract
Real DUNS numbers The 9-digit DUNS, not the site's internal profile hash
Fields the page hides Employee counts and revenue that the rendered page masks
Rich filters Country, five family-tree roles, and an employee range, applied at the source
Honest volume Automatic country fan-out to work around D&B's 1,000-row query ceiling

How it compares

No other Store Actor targets Dun & Bradstreet the same way, so the honest comparison is with the alternatives teams actually weigh.

Dun & Bradstreet Company Scraper D&B Hoovers subscription Build it in-house
Setup Run it now, zero config Sales call and contract Days of engineering
Cost Pay per result Four figures a year, minimum Engineering time
When D&B changes Maintained for you Not your problem You fix it
Output Fixed JSON schema, CSV/Excel export Their UI and exports Whatever you build
Coverage Public directory only Full commercial database Public directory only

What a D&B company row looks like

Every company returns as one flat JSON row. Here is a real record with detail enrichment on, unedited apart from a trimmed description:

{
  "companyName": "Ingram Micro Inc.",
  "duns": "004919486",
  "profileUrl": "https://www.dnb.com/business-directory/company-profiles.ingram_micro_inc.0f5f6a123eca1eafdf687775b69844f4.html",
  "companyId": "0f5f6a123eca1eafdf687775b69844f4",
  "companyRole": "Subsidiary",
  "corporateFamilyLabel": "Ultimate Parent",
  "tradeStyleName": "IM-logistics an Ingram Micro Division (Loudoun Co)",
  "industryName": "Professional and Commercial Equipment and Supplies Merchant Wholesalers",
  "parentIndustryName": "Wholesale Trade",
  "industries": [
    "Professional and Commercial Equipment and Supplies Merchant Wholesalers",
    "Merchant Wholesalers, Durable Goods",
    "Wholesale Trade",
    "Computer software"
  ],
  "revenue": 32760081006,
  "revenueFormatted": "$32.76 billion",
  "revenueCurrency": "USD",
  "revenueFiscalYear": "2026",
  "revenueReliability": "Actual",
  "employees": 22200,
  "employeesThisSite": 4000,
  "employeesScope": "Consolidated",
  "employeesReliability": "Actual",
  "employeeGrowthPercent": "-19.0% over 1-3 years",
  "website": "www.ingrammicro.com",
  "description": "Ingram Micro is one of the largest global providers of technology, mobility, and cloud platform solutions...",
  "keyPrincipal": "Paul Bay",
  "keyPrincipalTitle": "Chief Executive Officer",
  "contacts": [{ "name": "Paul Bay", "position": "Chief Executive Officer" }],
  "totalContacts": 6848,
  "totalPrincipals": 4,
  "isPrivateCompany": true,
  "stockExchange": null,
  "stockTicker": null,
  "ranks": null,
  "competitorCount": 3,
  "competitorIndustry": "Professional and Commercial Equipment and Supplies Merchant Wholesalers",
  "address": "1600 E Saint Andrew Pl",
  "fullAddress": "1600 E Saint Andrew Pl Santa Ana, CA, 92705-4926 United States",
  "city": "Santa Ana",
  "region": "California",
  "zipCode": "92705-4926",
  "country": "United States",
  "locationLabel": "Santa Ana, CA, United States",
  "searchQuery": "logistics",
  "scrapedAt": "2026-08-19T19:47:35.515Z"
}

Which fields come from where. Search results alone give you the identity and address block. Everything else needs Include company details, which fetches the company's profile page.

Field group Without details With details Fill rate with details
companyName, profileUrl, companyId, companyRole, industryName, address, city, region, zipCode, country, locationLabel โœ… โœ… 100%
duns (9-digit), fullAddress, parentIndustryName, industries, isPrivateCompany, corporateFamilyLabel, totalContacts, totalPrincipals : โœ… 100%
employees, employeesThisSite, employeesScope, employeesReliability : โœ… 100%
revenue, revenueCurrency, revenueFiscalYear, revenueReliability : โœ… 100%
keyPrincipal, keyPrincipalTitle, contacts : โœ… 100%
website : โœ… ~95%
competitorCount, competitorIndustry : โœ… ~55%
tradeStyleName, description, employeeGrowthPercent partial โœ… ~45%
stockExchange, stockTicker, ranks, revenueFormatted : โœ… public companies only

Fill rates measured on a 25-company sample from the live directory.

What D&B does not expose publicly, and this Actor therefore does not return: phone numbers, year founded or incorporated, legal company type, the full contact roster beyond the key principal, and the named levels of the corporate family tree. D&B blanks those out for anonymous visitors and sells them through D&B Hoovers. totalContacts still tells you how many contacts exist behind that wall. The employee-range filter works even though those values are gated, because D&B applies it server-side.

Configure the run

Drive the Actor from a search query, several queries, or direct D&B URLs. Filters are applied by D&B before results come back, so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
  "searchQuery": "Apple",
  "maxItems": 10,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

A scored prospect list:

{
  "searchQuery": "logistics",
  "countryCode": "US",
  "minEmployees": 50,
  "includeDetails": true,
  "maxItems": 1000,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Past the per-query ceiling, with several keywords and a country fan-out:

{
  "searchQueries": ["freight forwarder", "customs broker", "shipbroker"],
  "splitByCountry": true,
  "includeDetails": true,
  "maxItems": 20000,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

The 1,000-row ceiling. D&B stops paginating a query after its 1,000th row, whatever page size you ask for. A query with 300,000 matches still serves only the first 1,000. Three ways past it, and they combine: add more queries in Additional search queries, narrow with Country, or turn on Split by country to re-run each query once per country D&B reports for it. The run logs a warning whenever a query hits the ceiling with matches left behind.

Pricing

Pay-per-event: $15.99 per 1,000 result items, dropping to $11.99 at higher volume. You pay only for the company rows written to your dataset: nothing is billed for a company D&B refused to return, and detail enrichment is included at no extra charge.

Companies collected Approximate cost
100 $1.60
1,000 $15.99
10,000 $159.90

Higher monthly volume moves you down a discount tier: Bronze $14.66, Silver $13.34, Gold and above $11.99 per 1,000. New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 companies as a preview. Upgrade your Apify plan to lift the limit.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Dun & Bradstreet Company Scraper.
  3. Set your query and filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Dun & Bradstreet through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/dnb-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

The run fails with an explicit message when D&B reports zero matches. Broaden the search query, and relax the country, family-tree role, and employee filters, a narrow employee range with a country filter can legitimately match nothing.

My query has 300,000 matches but I only got 1,000.

That is D&B's per-query ceiling, not a bug. Add more keywords under Additional search queries, set a Country, or turn on Split by country.

Employees, revenue, or DUNS are missing.

Turn on Include company details. Those fields live on the company profile page, not in search results, so they are empty on rows collected without it.

Phone and year founded are always empty.

D&B masks them for anonymous visitors. They are not scraped and are not billed. See the field table above.

The run is slow.

Detail enrichment costs one extra request per company. Turn it off, or lower Maximum companies, if you only need the identity and address block.

I get blocked or see 403s.

D&B accepts residential exits and refuses Apify's datacenter pool, so leave the proxy on RESIDENTIAL. If you select another group and it gets refused, the run rotates its session, then switches itself to residential rather than failing. A run that still fails end to end is usually a proxy country the site rate-limits: try a different one.

FAQ

Question Answer
Do I need a Dun & Bradstreet API key? No. This Actor reads the public D&B business directory, so no registration, contract, or API key is required.
Is this the same data as D&B Hoovers? No. It is the public directory subset. Hoovers sells the full commercial database, including the fields listed as unavailable above.
Do I get a real DUNS number? Yes, the 9-digit DUNS, when Include company details is on. The companyId field is D&B's internal profile hash, which is not a DUNS number.
How many companies can I collect in one run? As many as your queries return. D&B serves at most 1,000 rows per query, so volume comes from more queries, a country filter, or Split by country.
Can I scrape a specific company by URL? Yes. Paste D&B company profile URLs into D&B URLs and each one is fetched directly.
Can I filter by country? Yes, with an ISO Alpha-2 code like US, DE, or GB.
What is the difference between the roles? They are D&B family-tree positions: Parent/Headquarters, Branch/Division, Subsidiary, Domestic Ultimate, and Global Ultimate.
Does the Actor handle pagination? Yes, up to D&B's 1,000-row ceiling per query.
What does it cost? $15.99 per 1,000 company rows, down to $11.99 at higher volume. Detail enrichment is included at no extra charge.
Can I export the data? Yes: CSV, JSON, Excel, or XML from the dataset, or straight from the API.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Dun & Bradstreet, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
searchQuery string Company name or keyword to search for (e.g. "Apple", "Goldman Sachs", "pharma"). Apple
maxItems integer How many companies to collect in this run, across all queries. D&B serves at most 1,000 rows per query: use several queries or Split by country to go past that. 10
includeDetails boolean Fetch the company profile page for every result. Adds the 9-digit DUNS number, employee count, revenue, website, industries, named contacts, corporate role and ranks. One extra request per company, so it is slower and billed separately. false
searchQueries array Extra keywords to search in the same run. Each query gets its own 1,000-row budget from D&B. not set
splitByCountry boolean Re-run each query once per country D&B reports for it. Turns one 1,000-row query into up to 1,000 rows per country. Much slower: leave off unless you need the volume. false
startUrls array D&B search URLs (these override Search Query) or D&B company profile URLs for direct lookup, e.g. https://www.dnb.com/business-directory/company-profiles.tesla_inc.e337e93c824d992066152d1a14d8d8e8.html not set
countryCode string Filter results by country (ISO Alpha-2 code, e.g. US, DE, GB, CA). not set
companyRole string (6 options) Filter by the company's role in its corporate family tree. all
minEmployees integer Only return companies with at least this many employees. Applied by D&B before results are returned. not set
maxEmployees integer Only return companies with at most this many employees. Applied by D&B before results are returned. not set
proxyConfiguration object Proxy used to reach D&B. Residential is the group the site accepts; datacenter exits are refused. If you pick another group and it gets blocked, the run switches to residential on its own. {"useApifyProxy":true,"apifyProxyGroups"

Pricing

from $11.99 per 1,000 results

Charged forWhat it isPrice each
Actor Start Charged once when the run starts. $0.005
Result Item Charged once per result collected. $0.01199 to $0.01599

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~dnb-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQuery": "Apple",
    "maxItems": 3
  }'

Examples

Input that runs as-is.

input.json
{
  "searchQuery": "Apple",
  "maxItems": 3
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Dun & Bradstreet Company Scraper on Apify All scrapers