# Pages d'Or Gouden Gids Scraper: VAT, KBO & Business Leads (`getascraper/pagesdor-goudengids-scraper`) Actor

Extract Belgian business leads from Pages d'Or (French) or Gouden Gids (Dutch), same nationwide directory. Every listing includes VAT number, official KBO register status, founding date, and employee count, not just a phone number. Monitor mode for new listings. $0.70 per lead.

- **URL**: https://apify.com/getascraper/pagesdor-goudengids-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.60 / 1,000 company records

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Pages d'Or Gouden Gids Scraper: VAT, KBO & Business Leads

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EFF6FF;border:1px solid #BFDBFE;border-top:4px solid #1D4ED8;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Belgian business leads with the government paperwork already attached</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search Pages d'Or or Gouden Gids in one Actor, French or Dutch, and get VAT numbers and official KBO register status on every lead, not just a name and a phone number.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E40AF">🌍 Both languages, one Actor</span><br>
<span style="font-size:12px;color:#57534E">Search Pages d'Or (French) or Gouden Gids (Dutch), same nationwide directory, your choice.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E40AF">🏛️ Government register status included</span><br>
<span style="font-size:12px;color:#57534E">VAT number and official KBO register status and link on every listing.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E40AF">🔔 New-listing alerts</span><br>
<span style="font-size:12px;color:#57534E">Turn on monitor mode and every scheduled run only returns businesses new since the last one.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E40AF">📅 Founding date and headcount</span><br>
<span style="font-size:12px;color:#57534E">Know how established a company is and roughly how big, before you reach out.</span>
</td>
</tr>
</table>

A phone number tells you how to call a business. It doesn't tell you whether the company is actually registered, how long it's been running, or how many people work there. This Actor pulls Belgian business listings from [Pages d'Or](https://www.pagesdor.be) and [Gouden Gids](https://www.goudengids.be), the same nationwide directory in French or Dutch, with VAT numbers and official KBO government register status attached to every lead.

### 🚀 Why use it

**"I build B2B lead lists for Belgium."** Wallonia and Flanders speak different languages on the same directory. I needed one tool that covers both, not two separate scrapers with different fields.

**"I qualify leads before handing them to sales."** A phone number isn't enough. I need to know the company is actually registered and active before someone calls it.

**"I track new businesses opening in a category or city."** I don't want to re-run the same search every week and manually diff the results myself.

### 🧭 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a language, keyword, and city</span><br>
<span style="font-size:12px;color:#57534E">French or Dutch, any category, any Belgian city, or leave the city blank for nationwide.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run it once, or put it on a schedule</span><br>
<span style="font-size:12px;color:#57534E">Turn on monitor mode and every scheduled run only returns new listings.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get structured rows</span><br>
<span style="font-size:12px;color:#57534E">Contact details, VAT number, KBO status, founding date, and headcount, ready to use.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `mode` | enum | No | Search by keyword and location (full detail on every result), or fetch specific listings directly by URL. |
| `directUrls` | array of strings | No | Direct listing URLs to fetch detail for. Detail mode only. |
| `language` | enum | No | French coverage (Pages d'Or) or Dutch coverage (Gouden Gids). Same underlying data. |
| `keyword` | string | No | Business category or search term. Search mode only. |
| `location` | string | No | Belgian city or province. Leave blank for nationwide search. |
| `proxyConfiguration` | object | No | Connection settings. Works reliably with the default. |
| `monitorMode` | boolean | No | When on, only pushes listings new since the previous run. |
| `maxItems` | integer | No | Stop after this many records. |

### 📤 Output

```json
{
  "rowType": "detail",
  "name": "DNP Concept",
  "officialUrl": "https://www.dnpconcept.be",
  "street": "Champ le Houtte 8A",
  "postalCode": "6987",
  "city": "Rendeux",
  "region": "Luxembourg",
  "country": "BE",
  "phone": "+32484976612",
  "email": "info@dnpconcept.be",
  "vatNumber": "BE0658892195",
  "kboStatus": "Dossier actif",
  "kboUrl": "https://kbopub.economie.fgov.be/kbopub/toonondernemingps.html?lang=fr&ondernemingsnummer=0658892195",
  "foundingDate": "2016-07-11",
  "employeesRange": "De 1 à 4 personne(s)",
  "language": "fr",
  "sourceUrl": "https://www.pagesdor.be/entreprise/Rendeux/L5548185/DNP+Concept/",
  "scrapedAt": "2026-09-02T00:37:00.448Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 🗃️ Data table

| Field | Type | Description |
|---|---|---|
| `name` | string | Business name |
| `street` / `postalCode` / `city` / `region` / `country` | string | Full address components |
| `phone` / `email` / `officialUrl` | string | Contact details |
| `vatNumber` | string | Belgian VAT number |
| `kboStatus` | string | Official KBO government register status |
| `kboUrl` | string | Direct link to the company's official KBO register entry |
| `foundingDate` | string | Date the company was registered |
| `employeesRange` | string | Reported headcount band |
| `language` | string | Which edition the listing was pulled from, `fr` or `nl` |
| `sourceUrl` | string | Link to the original listing |

### 💰 Pricing

This Actor uses pay per event pricing: you're charged per listing extracted, and nothing else. Empty runs cost nothing. There are no subscriptions and no minimum spend.

### ⭐ Enjoying Pages d'Or Gouden Gids Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EFF6FF;border:1px solid #BFDBFE;border-left:5px solid #1D4ED8;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this gave you a lead list you could actually trust, that's worth 10 seconds of your time.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating helps other Belgium-focused teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1D4ED8;border:1px solid #BFDBFE;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/pagesdor-goudengids-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Does this Actor need a Pages d'Or or Gouden Gids account?**
No. Every field comes from the site's own public pages. There's no login, credential, or key input anywhere in this Actor.

**What's the difference between Pages d'Or and Gouden Gids?**
Same nationwide business directory, published in two languages. Pages d'Or serves French-speaking Belgium, Gouden Gids serves Dutch-speaking Belgium. Set the `language` input to choose either edition; the underlying company data is the same.

**Is the KBO status field verified?**
The status and register link come directly from the directory's own published data, which links to Belgium's official KBO government register. Always confirm directly with the KBO for anything compliance-critical.

**Can I get alerted only about new businesses, not the whole search history?**
Yes. Turn on monitor mode and schedule the Actor to run periodically. Each run after the first only pushes listings new since the previous run.

**Is this legal?**
This Actor only extracts publicly available information already shown to any visitor of the directory's site. Always review the target site's terms of service before using the data commercially.

### 🔗 Other actors

- [Startup investor contact database](https://apify.com/getascraper/startup-investor-contact-database) ↗ - Investor contact data for fundraising research.
- [SEC Form D monitor: startup funding rounds](https://apify.com/getascraper/sec-form-d-funding-monitor) ↗ - Startup funding rounds straight from SEC filings.
- [Forge Global Scraper: Pre-IPO Valuations & Funding Rounds](https://apify.com/getascraper/forge-global-scraper) ↗ - Private company valuations and funding-round history.
- [Capitol Trades Scraper: Congress Stock Trades & Monitor Mode](https://apify.com/getascraper/capitol-trades-scraper) ↗ - US Congress stock-trade disclosures with monitor mode.

# Actor input Schema

## `mode` (type: `string`):

Browse search results, or fetch full detail (VAT, KBO status, opening info) for specific listing URLs.

## `directUrls` (type: `array`):

Direct pagesdor.be or goudengids.be listing URLs to fetch full detail for. Only used in detail mode.

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

French coverage via pagesdor.be, or Dutch coverage via goudengids.be. Same underlying data, bilingual Belgium.

## `keyword` (type: `string`):

Business category or search term (e.g. restaurant, electricien, plombier). Only used in search mode.

## `location` (type: `string`):

Belgian city or province to search in. Leave blank for Belgium-wide search. Only used in search mode.

## `proxyConfiguration` (type: `object`):

A real browser session is required to load these sites. Datacenter (the default) works reliably and is far cheaper; switch to Residential only if a large run starts hitting blocks.

## `monitorMode` (type: `boolean`):

When enabled, only pushes listings not seen in a previous run for the same keyword and location, so a scheduled run acts as a new-listing alert feed.

## `maxItems` (type: `integer`):

Stop after this many records. Search mode fetches each listing's own detail page, so keep this modest for a quick run.

## Actor input object example

```json
{
  "mode": "search",
  "directUrls": [
    "/entreprise/Rendeux/L5548185/DNP+Concept/"
  ],
  "language": "fr",
  "keyword": "restaurant",
  "location": "Bruxelles",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "monitorMode": false,
  "maxItems": 10
}
```

# Actor output Schema

## `listings` (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 = {
    "mode": "search",
    "directUrls": [
        "/entreprise/Rendeux/L5548185/DNP+Concept/"
    ],
    "language": "fr",
    "keyword": "restaurant",
    "location": "Bruxelles",
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "monitorMode": false,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/pagesdor-goudengids-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 = {
    "mode": "search",
    "directUrls": ["/entreprise/Rendeux/L5548185/DNP+Concept/"],
    "language": "fr",
    "keyword": "restaurant",
    "location": "Bruxelles",
    "proxyConfiguration": { "useApifyProxy": True },
    "monitorMode": False,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/pagesdor-goudengids-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 '{
  "mode": "search",
  "directUrls": [
    "/entreprise/Rendeux/L5548185/DNP+Concept/"
  ],
  "language": "fr",
  "keyword": "restaurant",
  "location": "Bruxelles",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "monitorMode": false,
  "maxItems": 10
}' |
apify call getascraper/pagesdor-goudengids-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/pagesdor-goudengids-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/VvDhftSUVzy1noAUH/builds/Eud57mCi7toWO1q3K/openapi.json
