# Pages d'Or Belgium Scraper: Business Phones & Emails (`themineworks/pagesdor-business-email-scraper`) Actor

Scrape Pages d'Or and Gouden Gids (pagesdor.be, goudengids.be) by trade and town: name, phone, address, coordinates, website, rating, VAT number. Turn on emails to find each business's address from the directory or its website, charged only when found.

- **URL**: https://apify.com/themineworks/pagesdor-business-email-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Lead generation, Business, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 business listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Pages d'Or Belgium Scraper: Business Phones & Emails

[![20 Belgian businesses with 20 emails in 31 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/pagesdor-business-email-scraper-hero.png)](https://console.apify.com/actors/6XEJPsuEur4rUhKO9/input)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder), with over 140,000 runs across 170+ public actors. This actor ranks #1 for "pages d'or belgium" in Apify Store search.

### Why choose this actor?

- **An email on almost every Belgian business.** Belgian firms publish their email on Pages d'Or far more often than firms do on the other national directories we scrape. In our proof run (électricien in Liège, 29 Sep 2026) **20 of 20 businesses came back with an email**, 19 from the Pages d'Or listing and 1 from the business's own website. You pay for an email only when one is delivered, and a chain's shared inbox is charged once per run.
- **VAT and enterprise numbers you can match on.** With emails or business pages on, all 20 rows of the proof run carried the Belgian VAT number and the ten digit enterprise number (KBO in Dutch, BCE in French), plus phone, address, coordinates and categories. No Pages d'Or account, no cookies, no proxy to set up.
- **Only the businesses the site lists for your town.** Pages d'Or quietly pads the end of a town's list with businesses from elsewhere in Belgium, and turns a town it does not know into a nationwide search. The actor cuts both, so you are never billed for nationwide rows under a town's name. A business found by two searches, or on both the French and the Dutch site, is delivered and charged once.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/6XEJPsuEur4rUhKO9/input)

**Part of The Mine Works Leads and business directories family:** [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder), [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup), [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads), [JustDial Scraper](https://apify.com/themineworks/justdial-business), [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search), [IndiaMART Scraper](https://apify.com/themineworks/indiamart-suppliers).

### Try it in one minute

Paste this input and press Start. It returns 10 electricians in and around Liège, without emails, in a few seconds:

```json
{
  "queries": ["électricien"],
  "locations": ["Liège"],
  "maxResultsPerSearch": 10
}
```

You can say what you want in three ways, and mix them in one run:

- **Queries and locations** (`queries`, `locations`): trade words as you would type them on the site, such as `plombier`, `dentiste` or `boulangerie`, and towns, cities or provinces such as `Bruxelles`, `Liège` or `Brabant Flamand`. Every query is searched in every location. A postcode works together with its town (`4000 Liège`); a postcode on its own finds nothing on Pages d'Or. Leave `locations` empty to search the whole country.
- **Search pages** (`startUrls`): any search result page from www.pagesdor.be (`/trouvez/...` or `/entreprises/...`) or www.goudengids.be (`/zoeken/...` or `/bedrijven/...`), copied from the address bar.
- **Site language** (`language`): `fr` searches pagesdor.be, `nl` searches goudengids.be, `both` searches each query on both sites and removes the businesses found twice.

Apify's free plan includes $5 of credit every month, which covers about 2,400 businesses at this actor's Free plan price with emails off, or about 150 businesses that each come back with an email.

#### Copy to your AI assistant

```text
themineworks/pagesdor-business-email-scraper on Apify. Returns Belgian businesses from Pages d'Or (pagesdor.be) and Gouden Gids (goudengids.be) by trade and town: name, phones, address, coordinates, website, rating, categories, VAT and enterprise number, and optionally an email from the directory or the business website. Call ApifyClient("TOKEN").actor("themineworks/pagesdor-business-email-scraper").call(run_input={"queries": ["plombier"], "locations": ["Bruxelles"], "maxResultsPerSearch": 50, "includeEmails": true}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: queries (trade words in the site's language) or startUrls (pagesdor.be or goudengids.be search pages). Optional: locations (towns, cities, provinces, or postcode plus town; empty = all of Belgium), language (fr, nl or both; default fr), maxResultsPerSearch (default 30, 1 to 1000), includeEmails (default false), includeDetails (default false), verifyEmailDomain (default true), allowUnblockerFallback (default true). Rows with _type "info" are notes, not businesses. Full spec: GET https://api.apify.com/v2/acts/themineworks~pagesdor-business-email-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations
```

### Key features

- **29 fields per business**: name, categories, every phone in international format, street, postcode, town, coordinates, website, rating, review count, opening hours, description, VAT number, enterprise number, the email and where it was found, and the search that found the row.
- **Both language sites in one actor.** Pages d'Or (French) and Gouden Gids (Dutch) are one platform with two front ends. Pick `fr`, `nl` or `both`; with `both`, a business that appears on both sites is delivered once.
- **Up to 50 queries times 50 locations per run**, at most 300 searches, and up to 1,000 businesses per search. The site shows 20 per page, and the actor turns the pages for you.
- **Emails from two places.** First the address the business published on its Pages d'Or page, then its own website (homepage, then contact and legal pages, at most 5 pages and 20 seconds per site). Up to 5 addresses per row, best first, each checked for a working mail server.
- **Clean lists.** The padding the site adds after a town's real results is cut, an unknown town returns nothing instead of the whole country, and the same business under a second listing id (an advert and its normal card) is kept once.
- **Plain HTTP at 512 MB**, no browser. Every run writes a summary to the `OUTPUT` record: per search, the status, the number of results the site reports, pages read and refused, and where the emails came from.

### How to use it

#### Basic: one trade in one town

```json
{
  "queries": ["plombier"],
  "locations": ["Bruxelles"],
  "maxResultsPerSearch": 100
}
```

Pages d'Or reported 256 plumbers for this search on 1 Oct 2026. A town's search returns what the site lists for it, which includes nearby communes and some advertisers who serve the town from further away: the Liège proof run returned businesses in Herstal, Seraing and Stavelot.

#### Several trades in several towns

Every query runs in every location, so this is six searches:

```json
{
  "queries": ["plombier", "électricien", "chauffagiste"],
  "locations": ["Namur", "Charleroi"],
  "maxResultsPerSearch": 200
}
```

A business found by two of the searches is delivered once and charged once.

#### French and Dutch at once

The site reads search words in its own language: in a 28 Sep 2026 test, `plombier` in Bruxelles gave 256 results on pagesdor.be but 67 on goudengids.be, and `loodgieter` gave 39 and 255. To cover both communities, list the word in both languages and search both sites:

```json
{
  "queries": ["plombier", "loodgieter"],
  "locations": ["Bruxelles"],
  "language": "both",
  "maxResultsPerSearch": 300
}
```

The businesses the four searches share are delivered once.

#### Cold email list for a province

Agencies and suppliers selling to Belgian trades build a list per province with the email turned on:

```json
{
  "queries": ["électricien"],
  "locations": ["Brabant Flamand", "Liège", "Namur"],
  "maxResultsPerSearch": 500,
  "includeEmails": true
}
```

Rows with an email carry `email_source` (`directory` or `website`) and `email_source_url`. To refresh the list every month, save the input as a task and add it to a schedule in Apify Console (Schedules, Add schedule). The actor has no "only new" mode, so compare `listing_id` with last month's export to find the newcomers.

#### VAT numbers for CRM matching, without paying for emails

Opening each business page costs nothing extra and adds the VAT number, the enterprise number, categories, opening hours and the full description:

```json
{
  "queries": ["boulangerie"],
  "locations": ["Liège"],
  "includeDetails": true,
  "maxResultsPerSearch": 100
}
```

Match `company_number` against the crossroads bank (KBO or BCE) or your CRM. The run is slower than a plain search, because it reads one more page per business.

#### Read a search you already set up on the site

Paste the result page from your browser, from either site:

```json
{
  "startUrls": [
    { "url": "https://www.goudengids.be/zoeken/loodgieter/Antwerpen/" },
    { "url": "https://www.pagesdor.be/trouvez/plombier/Bruxelles/" }
  ],
  "maxResultsPerSearch": 50
}
```

Each pasted page is read from its first page on, on its own site, whatever `language` says.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `queries` | array of strings | none (prefilled with `plombier`) | Trade words to search, one per line, in the site's language. Up to 50. Needed unless you give `startUrls`. |
| `locations` | array of strings | empty | Towns, cities or provinces, typed as on the site, for example `Bruxelles`. A postcode needs its town (`4000 Liège`). Every query is searched in every location. Empty searches all of Belgium. Up to 50. |
| `startUrls` | array | empty | Search result pages from www.pagesdor.be or www.goudengids.be, read instead of or as well as the queries. |
| `maxResultsPerSearch` | integer | `30` | Most businesses per query and location, 1 to 1,000. The site shows 20 per page. |
| `includeEmails` | boolean | `false` | Look for each business's email: the address on its Pages d'Or page first, then its website. Charged only for rows where one is found. |
| `includeDetails` | boolean | `false` | Open each business's own page for categories, opening hours, VAT and enterprise numbers and the full description. No extra charge, slower. With `includeEmails` on, the page is opened anyway. |
| `language` | string | `fr` | `fr` (pagesdor.be), `nl` (goudengids.be) or `both` (each search on both sites, duplicates removed). |
| `verifyEmailDomain` | boolean | `true` | Keep an email only when its domain has a mail server. Applies to directory and website emails alike. |
| `allowUnblockerFallback` | boolean | `true` | When a search page is refused several times over the fast connection, retry it through Apify's unblocking proxy. Included in the price. |

Give at least one query or one search page. A run with neither writes a note row and stops; the $0.005 start fee still applies.

### What data do you get?

One row per business. Fields with no value are left out of the row rather than sent as empty.

**The business**

- `listing_id` (the site's id, such as `L13773640`, the same on both language sites), `listing_url`, `name`, `categories` (the site's own trade headings, from the business page), `description`, `rating`, `review_count`, `opening_hours`

**Contact**

- `phone` (the first number) and `phones` (all of them), in international format such as `+32 4 277 19 71`; `website`, with tracking parameters removed

**Address and map**

- `address` (one line), `street`, `postal_code`, `city` (as the site writes it, for example `Ougrée (Seraing)`), `region` (only when the site gives one), `country` (`BE`), `latitude`, `longitude`

**Belgian registration**

- `vat_id` (for example `BE0797007923`) and `company_number` (the ten digit KBO or BCE enterprise number), read from the business page, so present when `includeEmails` or `includeDetails` is on and the business published them

**Email** (with `includeEmails` on)

- `email` (the best address), `emails` (up to 5, best first), `email_source` (`directory` or `website`) and `email_source_url` (the page it was read from)

**Search context**

- `source_site` (`pagesdor.be` or `goudengids.be`), `search_query`, `search_location`, `scraped_at`

Fill rates in the proof run (20 businesses, emails on): phone 19, website 12, rating 8, opening hours 11, coordinates, categories, VAT and enterprise number 20 each. Categories, opening hours and the registration numbers come from the business page, so a run with emails and business pages both off returns the search card fields only.

#### Stable fields for automations

These fields were present in every one of the 20 business rows of the proof run, are filled from every search card, and their names will not change:

| Field | What it holds |
|---|---|
| `listing_id` | The site's id for the business, the same in every run and on both language sites |
| `listing_url` | Link to the business page on pagesdor.be or goudengids.be |
| `name` | Business name as listed |
| `address` | Street, postcode and town on one line |
| `street` | Street and number |
| `postal_code` | Four digit Belgian postcode |
| `city` | Town, with the municipality in brackets when the site gives it |
| `country` | Always `BE` |
| `source_site` | `pagesdor.be` or `goudengids.be` |
| `search_query` | The query or pasted search that found the row |
| `scraped_at` | When the row was read (ISO 8601) |

`phone`, `latitude` and `longitude` were in nearly every row (19, 20 and 20 of 20), but the site lists some businesses without a phone and a few advertisers without coordinates, so test for them before you rely on them.

#### Output examples

Real rows from the proof run on 29 Sep 2026 (électricien in Liège, emails on), trimmed: some fields (including `categories`) are left out and opening hours are cut to two days.

An email published on the directory, with the website and the registration numbers:

```json
{
  "listing_id": "L6766203",
  "listing_url": "https://www.pagesdor.be/entreprise/Li%C3%A8ge/L6766203/JL+Elec/",
  "name": "JL Elec",
  "phone": "+32 495 20 01 01",
  "phones": ["+32 495 20 01 01"],
  "address": "Rue Bihet 6, 4020 Liège",
  "street": "Rue Bihet 6",
  "postal_code": "4020",
  "city": "Liège",
  "region": "Liège",
  "country": "BE",
  "latitude": 50.644733,
  "longitude": 5.624723,
  "website": "http://www.jl-elec.be",
  "email": "jlelec.info@gmail.com",
  "emails": ["jlelec.info@gmail.com"],
  "email_source": "directory",
  "email_source_url": "https://www.pagesdor.be/entreprise/Li%C3%A8ge/L6766203/JL+Elec/",
  "rating": 5,
  "review_count": 1,
  "opening_hours": ["Mo 08:00-18:00", "Tu 08:00-18:00"],
  "vat_id": "BE0694894340",
  "company_number": "0694894340",
  "source_site": "pagesdor.be",
  "search_query": "électricien",
  "search_location": "Liège",
  "scraped_at": "2026-09-29T09:33:09.367Z"
}
```

An email found on the business's own website, on its contact page:

```json
{
  "listing_id": "L1235331",
  "name": "Laurent Lallemand Sprl",
  "phone": "+32 494 70 07 11",
  "address": "Rue de la Fontaine 2, 1350 Noduwez (Orp-Jauche)",
  "postal_code": "1350",
  "city": "Noduwez (Orp-Jauche)",
  "latitude": 50.732,
  "longitude": 4.986159,
  "website": "http://www.laurentlallemand.be",
  "email": "contact@laurentlallemand.be",
  "emails": ["contact@laurentlallemand.be"],
  "email_source": "website",
  "email_source_url": "http://www.laurentlallemand.be/contact.html",
  "rating": 5,
  "review_count": 23,
  "vat_id": "BE0664748918",
  "company_number": "0664748918",
  "source_site": "pagesdor.be"
}
```

A business with no website, two phones, and the email from its Pages d'Or page:

```json
{
  "listing_id": "L1411890",
  "name": "Streel-Elec",
  "phone": "+32 4 257 67 35",
  "phones": ["+32 4 257 67 35", "+32 495 24 02 41"],
  "address": "Rue de Liège 57, 4340 Othée (Awans)",
  "city": "Othée (Awans)",
  "latitude": 50.71055,
  "longitude": 5.47172,
  "email": "elec@streel.net",
  "email_source": "directory",
  "rating": 3,
  "review_count": 1,
  "description": "Dépannage électrique, réparation, câblage réseau, mise en conformité, domotique, interphonie/vidéophonie et alarme; travaux réalisés par le patron.",
  "vat_id": "BE0456363422",
  "company_number": "0456363422"
}
```

The note row at the end of the run (never charged; filter on `_type` to drop it):

```json
{
  "_type": "info",
  "delivered": 20,
  "message": "20 businesses delivered. This row is informational: it is never billed.",
  "scraped_at": "2026-09-29T09:33:12.887Z"
}
```

### Pricing

You pay per business delivered to your dataset, plus a flat start fee per run. An email is a second, separate charge, made only for rows that come back with one.

| Event | Free plan | Starter (Bronze) | Scale (Silver) | Business (Gold) and above |
|---|---|---|---|---|
| Business delivered (`listing-scraped`), per business | $0.002 | $0.0017 | $0.0014 | $0.001 |
| Business delivered, per 1,000 | $2.00 | $1.70 | $1.40 | $1.00 |
| Email found (`email-found`), per email | $0.03 | $0.025 | $0.02 | $0.015 |
| Email found, per 1,000 | $30 | $25 | $20 | $15 |
| Run start (`run-start`), once per run | $0.005 | $0.005 | $0.005 | $0.005 |

The start fee is our own `run-start` event: a flat $0.005 once per run, whatever memory you choose. It is not Apify's per GB start fee, and it is charged on every run, including a run that finds nothing. These prices took effect on 28 Sep 2026, and no change is scheduled as of 1 Oct 2026. The Pricing tab always shows the rate for your own plan.

A worked example on the Starter plan: 1,000 businesses with emails off cost $1.70 plus $0.005. With emails on, Belgian rows often all carry an email, so plan for up to 1,000 emails at $0.025 on top ($25). Turn emails on only when you need them.

Never charged:

- search pages the site refused, and the retries through the unblocking proxy;
- a business already delivered by another search in the run, on either language site, or the same business under a second listing id;
- the padding the site adds after a town's real results, and nationwide results for a town the site does not know (they are not delivered at all);
- business pages and websites that were opened but gave no email (the row is charged as a business only);
- an email address already charged earlier in the same run, such as the shared inbox of a chain's branches (it is still delivered on every row);
- the note row and the `OUTPUT` run summary.

To cap what a run can cost, set a maximum total charge in the run options. The actor stops before a business the budget cannot pay for, and when the budget covers a business but not its email, the row is delivered without the email and the email is not charged.

### FAQ

#### What are Pages d'Or and Gouden Gids?

Belgium's yellow pages: one business directory with a French front end (www.pagesdor.be) and a Dutch one (www.goudengids.be). It lists tradespeople, shops, restaurants, professionals and companies across Belgium, with phone, address, website and often an email.

#### How many businesses can I get?

Up to 1,000 per search and up to 300 searches per run (50 queries times 50 locations, capped at 300). The site reports how many results each search has, and the run summary repeats that number. For a big area, split it into towns or provinces, each its own location.

#### How fresh is the data?

Every run reads the site live; nothing comes from a cache. `scraped_at` on each row says when it was read.

#### Do I need a Pages d'Or account, cookies or an API key?

No. The actor reads the public pages any visitor sees, without signing in. There is nothing of yours to connect.

#### Do I need to set up a proxy?

No. The actor uses a fast connection that looks like a normal Chrome browser through Apify's datacenter proxies, and the site lets most requests through: in the proof run all 21 requests (1 search page and 20 business pages) passed on the first try. When the site refuses a search page several times, the actor retries it through Apify's unblocking proxy, which is slower and included in the price. Refused pages are listed in the run summary and never charged.

#### Will every business have an email?

No, but many will. In the proof run 20 of 20 électricien rows in Liège had one (19 from the directory, 1 from a website), and in a 28 Sep 2026 test 19 of 20 plombier rows in Bruxelles had one. A business that published no email on the directory and has no website, or only a social media page, gives none. The actor never guesses an address from a name, and you pay nothing extra for a row without an email.

#### What is the difference between the email from the directory and from the website?

A `directory` email is the one the business gave Pages d'Or. A `website` email is read from the business's own homepage, contact or legal page, and kept only when it is on the business's own domain or on an ordinary provider such as skynet.be, telenet.be or gmail.com; the address of the agency that built the site is dropped. Both go through the same mail server check when `verifyEmailDomain` is on.

#### Why do I get fewer businesses than the number the site shows?

For a large town the two numbers match. For a small town with fewer than 20 businesses in a trade, the site puts the whole country in its count (thousands of results) and fills the page with businesses from elsewhere. The actor delivers only the businesses the site lists for that town, and says so in the run summary when there are none. Search the larger town nearby to find more.

#### Why did a search return nothing?

Three usual reasons, each named in the run summary: the site does not know the place (it would have searched the whole country, so the actor stops instead), the place is a postcode without its town (`1000` finds nothing, `4000 Liège` works), or the trade word is in the other language (`loodgieter` on the French site gives far fewer results than `plombier`). A search with no results costs nothing beyond the run's start fee.

#### What is the enterprise number?

Every Belgian business is registered in the crossroads bank for enterprises with a ten digit number (KBO in Dutch, BCE in French). It is returned as `company_number`, next to the VAT number `vat_id`, when the business page publishes it. Turn on `includeEmails` or `includeDetails` to get them.

#### Can I get only the new businesses each month?

There is no "only new" mode in this actor. Schedule the same input (save it as a task, then Schedules, Add schedule in Apify Console) and compare `listing_id` with your last export. Each scheduled run is billed like a manual one; the schedule itself is free.

#### Which formats can I export?

JSON, CSV, Excel, XML, HTML table and RSS from the dataset page in Apify Console, or through the Apify API.

#### Can I use it from Claude, ChatGPT or another AI agent?

- Connector URL: `https://mcp.apify.com/?tools=themineworks/pagesdor-business-email-scraper`.
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http pagesdor-business-email-scraper "https://mcp.apify.com/?tools=themineworks/pagesdor-business-email-scraper"`.

#### Is it legal to scrape Pages d'Or and Gouden Gids?

The actor collects only publicly visible business listings and never signs in. Business contact details are still personal data when they identify a person, for example a sole trader's name and mobile number, so how you store and use them is your responsibility: follow the site's terms and the GDPR, and where you send marketing messages also the ePrivacy rules in your country (and CAN-SPAM or the CCPA for contacts in the US). This is general information, not legal advice. The actor is an independent tool, not affiliated with or endorsed by Pages d'Or, Gouden Gids or FCR Media.

### Integrations

- **Google Sheets**: send each run's dataset to a sheet with Apify's Google Sheets integration.
- **Make, Zapier and n8n**: start runs and receive the businesses in your workflows.
- **Webhooks**: get a call when a run finishes, for example to load new rows into your CRM.
- **API**: start runs and read datasets from any language with the Apify API or the Python and JavaScript clients.
- **MCP clients**: Claude, ChatGPT and other agents through Apify's MCP server.

### More from The Mine Works

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads)
- [JustDial Scraper](https://apify.com/themineworks/justdial-business)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search)
- [IndiaMART Scraper](https://apify.com/themineworks/indiamart-suppliers)
- [Yandex Maps Scraper](https://apify.com/themineworks/yandex-maps-search)
- [Contact Details Scraper](https://apify.com/themineworks/website-contact-finder)
- [US Business Registry](https://apify.com/themineworks/us-state-business-registry)
- [Google Maps Scraper](https://apify.com/themineworks/google-maps-search-scraper)
- [Yellow Pages Scraper](https://apify.com/themineworks/yellowpages-us)
- [Lead Generation MCP](https://apify.com/themineworks/lead-generation-mcp)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency)
- [Google News Scraper](https://apify.com/themineworks/google-news)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp)

**Science, health and government data**

- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records)
- [data.gov.in Scraper](https://apify.com/themineworks/india-data-gov-scraper)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data)
- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products)
- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup)
- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper)

**More tools**

- [Tennis Match & Player Data Scraper](https://apify.com/themineworks/tennis-match-data)
- [Google Hotels Prices Scraper](https://apify.com/themineworks/google-hotels-prices-scraper)
- [LandWatch Scraper](https://apify.com/themineworks/landwatch-land-for-sale-scraper)

### Support

Found a problem or need a field? Open an issue on the actor's Issues tab and we will answer there. For a new source or a custom build, email dmineworks@gmail.com.

*Pages d'Or Belgium Scraper turns any Pages d'Or or Gouden Gids search into rows of Belgian businesses with phone, address, coordinates, VAT number and, when you want it, an email checked for a working mail server.*

# Actor input Schema

## `queries` (type: `array`):

Business types or trades to search, one per line, for example plombier. Each query is searched in every location below. Needed unless you paste search pages into Start URLs. Up to 50 per run.

## `locations` (type: `array`):

Town, city, region or postcode, one per line, typed the way you would on www.pagesdor.be, for example Bruxelles. Leave empty to search the whole country. Up to 50 per run.

## `startUrls` (type: `array`):

Optional. Paste search result pages from www.pagesdor.be or www.goudengids.be instead of, or as well as, Queries and Locations. Each page is read from its first page on.

## `maxResultsPerSearch` (type: `integer`):

Most businesses to return for each query and location, 1 to 1,000. The directory shows 20 per page, so 100 businesses take about 5 pages.

## `includeEmails` (type: `boolean`):

Off by default. Turn on to look for each business's email address: first the address the directory publishes, then the business's own website (homepage, then its contact and legal pages). You are charged the email price only for rows that come back with an email; a business where none is found costs nothing extra.

## `includeDetails` (type: `boolean`):

Also open each business's own page on the directory for the extra fields it holds, such as coordinates, opening hours, categories and registration numbers. Slower, and no extra charge. With Find emails on, the business page is opened anyway when the search result has no email.

## `language` (type: `string`):

Which site to search. Both sites hold the same businesses, but the search words are read in the site's language: type plombier for French, loodgieter for Dutch. Both runs each search on both sites and removes businesses found twice (charged once).

## `verifyEmailDomain` (type: `boolean`):

Only keep an email when its domain can receive mail (it has a mail server). Removes addresses of dead or misspelled domains, so you are not charged for them. Only used when Find emails is on.

## `allowUnblockerFallback` (type: `boolean`):

Search pages are read over a fast connection first. If the site refuses a page several times, try it through Apify's unblocking proxy, which is slower. Included in the price. Turn off to report such pages as refused instead.

## Actor input object example

```json
{
  "queries": [
    "plombier"
  ],
  "locations": [
    "Bruxelles"
  ],
  "maxResultsPerSearch": 30,
  "includeEmails": false,
  "includeDetails": false,
  "language": "fr",
  "verifyEmailDomain": true,
  "allowUnblockerFallback": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "plombier"
    ],
    "locations": [
        "Bruxelles"
    ],
    "maxResultsPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/pagesdor-business-email-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["plombier"],
    "locations": ["Bruxelles"],
    "maxResultsPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/pagesdor-business-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "plombier"
  ],
  "locations": [
    "Bruxelles"
  ],
  "maxResultsPerSearch": 30
}' |
apify call themineworks/pagesdor-business-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/pagesdor-business-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6XEJPsuEur4rUhKO9/builds/bizIjaKBiynoEpF5h/openapi.json
