Documentation Blog Free tools [email protected]Log in

Business directory API

A business directory API returns the companies a directory lists for a category in a place: name, category, the printed address split into street, CAP, comune and province, phone numbers and the listing URL. It is the channel that reaches the businesses search engines do not rank — the ones that exist commercially but not editorially.

$0.001 per delivered business · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/business_directory/run
$ curl $QD/business_directory/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{}'
{ "status": "done", "count": 10,
  "results": [
    {
      "name": "…",
      "category": "…",
      "address": "…",
      "street": "…" } ],
  "cost": 0.01 }
# 10 businesss × $0.001 · nothing delivered, nothing charged
$0.001 / business2,000 businesss on the free $2 every month
Semantic inputquery, location, sources — no URL lists
Up to 100businesss per run, pagination handled for you
No browserread over HTTP/TLS — cheaper and faster than rendering

What a business directory API does

Search engines rank what is optimised, and a two-person operation with no website optimises nothing. Asked for car rental in Milan, a web search returns the national chains and the price aggregators; the same category in a directory returns the independents, because a directory lists businesses rather than ranking pages. If your dataset is meant to describe a market rather than its advertisers, this is the source that closes the gap.

Every row is a business, not a page: one listing fetch yields around 25 companies already split into fields, so a row costs a tenth of a cent and needs no parsing on your side. The addresses arrive decomposed — street, CAP, comune, provincia — which is what makes a directory dataset joinable against your own records instead of a column of strings to normalise later.

What one business looks like

Every delivered business carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

FieldTypeWhat it holds
rankinteger1-based position in the merged result set.
namestringBusiness name as listed.
categorystring · nullableThe directory's own category for the business.
addressstring · nullableFull printed address.
streetstring · nullableStreet and number.
postal_codestring · nullableCAP.
citystring · nullableComune.
provincestring · nullableTwo-letter province code.
phonestring · nullableFirst published phone number.
phonesstring[]Every phone number on the listing.
descriptionstring · nullableBlurb the business published on the listing, when it has one.
profile_urlstring · nullableThe directory page for this business.
sourcestringWhich directory delivered the row.
source_idstring · nullableThe directory's own id — a stable dedup key.

Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

InputTypeRequiredWhat it does
querystringyesWhat the businesses do, as the directory categorises it — e.g. "autonoleggio", "dentista", "idraulico".
locationstringyesComune or quartiere — e.g. "Milano", "Milano Quartiere Affori", "Monza".
sourcesarraynoWhich directories to read (default paginegialle). Pagine Bianche is best-effort: it refuses repeated requests more often.
only_with_phonebooleannoDrop and do not bill businesses with no published phone number.
countrystringnoISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool.
max_resultsintegernoHow many businesses to deliver at most (1–100). You pay only for delivered businesses.

Pricing

Business directory API pricing

$0.001 per delivered business. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 businesss before you spend anything.

$0.001per delivered business$1 per 1,000 delivered businesss
2,000 businessson the free allowance$2 every month, no card
Zero rowszero chargeblocks, captchas and retries are on us
−30%on volume tiersthe catalog returns your key's price

Pay as you go

$0/mo
  • $2 free credit / month
  • 60 requests / min
  • List unit prices

Starter

$19/mo
  • $15 free credit / month
  • 300 requests / min
  • 10% off unit prices

Scale

$299/mo
  • $250 free credit / month
  • 1,200 requests / min
  • 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.

Integration

One POST, typed rows

Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/scraper/collectors/business_directory/run.

curl -X POST https://api.quanticdata.io/v1/scraper/collectors/business_directory/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

What people build with the business directory API

Three shapes of work this endpoint was designed around.

Market mapping

Count and locate every operator in a category across comuni, including the ones with no web presence, and you have the denominator that a search-based dataset silently omits.

Lead lists for local B2B

Name, address and a published phone number per business — for small operators the phone is the contact route, and it is on the listing.

Enriching a place dataset

Directory rows carry the legal-ish name and the printed address, which resolve entities that map data leaves ambiguous.

Business directory API versus rolling your own

The differences that actually cost time when you build this in-house.

DIY scraperThis collector
What you getWhatever ranks for the queryWhatever the directory lists for the category
Small operatorsLargely absent — they rank for nothingPresent: being listed is the whole point
AddressFree text on a page, if anySplit into street, CAP, comune, provincia

Why no official API answers this

There is no API that returns "every business of this kind in this town". Company registries hold legal entities — registration numbers, officers, filings — which is authoritative and tells you nothing about what a firm actually does today or how to reach it. Maps platforms answer with what they have mapped, weighted by prominence. Directories answer the question as asked, because listing businesses by category and place is the only thing they do.

That difference in purpose is the reason the coverage differs. A directory has no incentive to rank anyone: an operator appears because it is listed, which is exactly why the small ones are there. For a dataset that is supposed to describe a market rather than its advertisers, that is the property that matters.

Limits, coverage and the legal bit

One listing page per source, around 25 businesses. The "show more" control is served over XHR and the deep pages answer with an empty body on a direct request, so paging is not offered rather than half-implemented. Widen coverage by running more places — these directories are organised by comune and by quartiere — and de-duplicate on the directory id, which every row carries. Throughput is your plan's rate limit rather than anything about the collector: 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.

Coverage is Italian: the sources are Pagine Gialle and Pagine Bianche. Pagine Bianche is best-effort — it answered once and then refused repeated requests during testing — so it is selectable but not the default, and a refusal comes back as a note rather than as an empty result set that would read like "no businesses here".

Collecting publicly visible data is generally lawful in most jurisdictions, and courts have repeatedly declined to treat reading a public page as unauthorised access. Business listings are published by the directory for the purpose of being found, which is about as consent-adjacent as public data gets, and most of what comes back is commercial rather than personal data — though a sole trader's name and number are personal data even on a business listing. Using the contacts for unsolicited marketing is governed separately by GDPR and PECR, and in Italy also by the Registro Pubblico delle Opposizioni for phone numbers. None of this is legal advice — get some for your actual use case.

FAQ

Questions we get about the business directory API.

Something else? Ask us →

Why not just use a search API?

Because search returns the businesses that rank, and ranking correlates with marketing budget rather than with existing. Measured on car rental in Milan, ten web results were national chains and aggregators with no independents; the directory listing for the same category was mostly independents. Use both: search for the big players, the directory for the long tail.

How many businesses does one run return?

Around 25 per source — one listing page. The "show more" control is an XHR and the deep pages refuse a direct request, so coverage grows by asking for more places, which is how these directories are organised: by comune and by quartiere.

Which directories are covered?

Pagine Gialle by default, with Pagine Bianche selectable. Pagine Bianche is best-effort: it served one request during testing 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.

Is the data any good for an LLM pipeline?

It is typed and already decomposed, which is the part that usually costs you: name, category, street, CAP, comune, provincia, phones. There is no free-text blob to have a model clean up, and every row carries the directory id so the same business resolves across runs.

Is there a free business directory API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered businesss on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 100 businesss — the maximum for this collector — costs $0.1 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.

Can I call the numbers I collect?

Collecting a published business number and cold-calling it are different questions with different answers. In Italy, marketing calls to numbers in public directories are governed by the Registro Pubblico delle Opposizioni, which subscribers use to opt out; GDPR and PECR apply on top. Check the register before a campaign and take proper advice — this is not it.

How do I avoid duplicates against a Maps dataset?

Match on the normalised name plus the postal code, stripping legal-form suffixes: the directory prints "Autozitra srl" where Maps has "Autozitra", so a naive join counts the same business twice. The lead scraper does exactly this internally when its directory channel is enabled.

Run the business directory API now

$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.

Get my free API key
Get my free API key