A business directory API returns the companies a directory lists for a category in a place — name, category, the printed address split into street, postal code, comune and province, every published phone number, the listing URL and the directory's own id.
It exists because search engines and map platforms answer a different question than the one a market dataset asks. They return what ranks or what is prominent; a directory returns what is listed. Measured on "autonoleggio Milano" on 2026-08-21: a web search returned ten results — Europcar, Noleggiare, Avis, Kayak, Autovia, Hertz, Enterprise, Sicily by Car, Uber, Budget — with no independent operator at all. Maps did better at 19 results, still around half chains. The same category on the directory returned Auto Zitra, Noli Autoservice, Car Driver Milano, Savalan Rent Car, Van4You and Rhaama Service. Those businesses rank for nothing, and that is precisely why they are missing everywhere else.
$0.001 per delivered business, up to 100 businesss per run. Nothing delivered means nothing charged.
One POST carries a category and a place. The collector fetches that directory's listing through a residential exit in the country, parses each card into a typed row and returns them — around 25 businesses from a single page fetch, which is why a row costs a tenth of a cent.
Two parsing details are worth knowing because they are where home-grown versions go wrong:
Addresses arrive decomposed rather than as a string: street, postal_code, city, province. That is what makes the output joinable against records you already hold instead of a normalisation task waiting to happen.
query is the category as the directory files it — "autonoleggio", "idraulico", "dentista" — not a free-text description. location is a comune or a quartiere. sources selects the directories; Pagine Gialle is the default and Pagine Bianche is selectable but best-effort. only_with_phone drops and un-bills businesses with no published number.
One row per business. phones holds every number on the listing while phone is the first — small operators often publish a landline and a mobile, and the mobile is usually the one answered. source_id is the directory's own identifier: use it as the dedup key, because the same business appears with and without its legal-form suffix across sources. profile_url is the listing itself, which is where you go for anything the card does not carry.
$0.001 per delivered business (
$0.001 per delivered business,
A directory that refuses a request returns a note rather than an empty result set, and delivers nothing to bill. The free $2 monthly allowance covers about 2,000 businesses.
Company registries — the Registro Imprese, Companies House, OpenCorporates as an aggregator — hold the authoritative legal record: registration number, incorporation date, officers, filings. Use them for compliance and KYC, where nothing else will do. What they do not hold is what a business currently does or how to reach it: the registered address is frequently an accountant's office and the activity code was chosen once and never revisited.
Map platforms answer with what they have mapped, ranked by prominence, and cap a query well short of a full market. They are excellent for businesses with a maintained presence and structurally weaker for the ones without.
A directory answers the question as asked — list the businesses of this kind in this place — because that is the only thing it does. The three are complements: registry for legal facts, map for prominence and coordinates, directory for coverage.
The listing is plain server-rendered HTML, so a prototype is quick. What it runs into:
Count the operators in a category across comuni and you have a denominator; a search-derived list gives you the advertisers instead.
Name, address and a published phone for businesses that have no website to scrape — for small operators the phone is the contact route.
Run the directory alongside the lead scraper and keep what Maps did not return; that collector can merge the two channels itself.
The printed name and address resolve businesses that map data leaves ambiguous, and the directory id makes the match stable across runs.
One listing page per source, around 25 businesses. Paging is not offered rather than half-implemented: the deep pages refuse a direct request. Coverage grows by asking for more places — these directories are organised by comune and by quartiere — and rows carry the directory id so the same business de-duplicates cleanly across runs. Throughput follows your plan's rate limit: 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.
Coverage is Italian today: Pagine Gialle by default, Pagine Bianche selectable and best-effort.
Collecting publicly visible data is generally lawful in most jurisdictions, and a directory listing is published precisely so the business can be found. Most of what comes back is commercial rather than personal data, though a sole trader's name and number are personal data wherever they appear. Using the numbers for marketing is a separate question from collecting them: in Italy calls to numbers in public directories are governed by the Registro Pubblico delle Opposizioni, with GDPR and PECR on top. None of this is legal advice — get some for your actual campaign.
Because search returns what ranks, and ranking tracks marketing effort rather than existence. On "autonoleggio Milano" a web search returned ten national chains and aggregators with no independents; the directory listing for the same category was mostly independents. Use search for the big players and the directory for the long tail.
Around 25 per source — one listing page. The show-more control is an XHR and the deep page URLs answer with an empty body on a direct request, so coverage comes from asking for more comuni or quartieri rather than from paging.
Pagine Gialle by default and Pagine Bianche on request. Pagine Bianche is best-effort: during testing it served one request and refused the following ones, so it is offered rather than relied on, and a refusal is reported as a note instead of a silent empty result.
$0.001 per delivered business —
The lead scraper does it for you: enable its directories input and it merges both channels, de-duplicating on the normalised name with legal-form suffixes stripped, so "Autozitra" and "Autozitra srl" are not delivered twice. Every row carries a source field so you can tell which channel found it.
Yes — street, postal code, comune and province as separate fields, not one string. That is what makes the output joinable against records you already hold rather than a normalisation job.
Collecting publicly visible listings is generally lawful in most jurisdictions, and a directory publishes them so businesses can be found. Using the contacts for unsolicited marketing is governed separately — in Italy by the Registro Pubblico delle Opposizioni for phone numbers, plus GDPR and PECR. Take proper advice before running a campaign.