# Romanian Business Contacts & Phone Numbers (`darknezz/ro-business-contacts-scraper`) Actor

Unmasked Romanian business phone numbers and contact details from Pagini Aurii (yellow pages): company name, full phone number, address, locality, activity category and description. One clean row per business, no login and no proxy needed.

- **URL**: https://apify.com/darknezz/ro-business-contacts-scraper.md
- **Developed by:** [Oaida Adrian](https://apify.com/darknezz) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 contact extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Romanian Business Contacts & Phone Numbers

Scrape **unmasked Romanian business phone numbers** and contact details from
[Pagini Aurii](https://www.paginiaurii.ro) — Romania's yellow-pages directory.

One clean row per business: company name, full phone number, address,
locality, activity category and description.

### Why this Actor exists

Other Romanian directories hide contact digits behind a login or a paid
"access package" — listafirme.eu, for example, serves anonymous visitors a
masked preview (`021-367.17 - - 1 removed`) and only the CUI, address and
website stay intact. Pagini Aurii publishes the **complete** phone number as
schema.org microdata on every company profile, for everyone. Measured on a
250-page sample: **249/250 profile pages carried a full phone number** —
no login, no cookies, no proxy, no headless browser.

### Pricing

- **$0.02 per contact record** (`contact-extracted`) — one row per business.
- **$0.01 per Actor start** (`apify-actor-start`).

Example: 500 businesses with phone numbers = **$10.01**. Set
*Run options → Maximum cost per run* (or `maxTotalChargeUsd` in the API) to
cap the spend; the run stops charging and pushing once the ceiling is hit.
`maxResults` in the input is the simpler cap — the two work together.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `keyword` | string | — | Business activity, e.g. `restaurant`, `instalatii electrice` |
| `city` | string | — | Locality as published, e.g. `CLUJ-NAPOCA`, `PETRILA` |
| `searchPages` | integer | 20 | Keyword result pages to walk (10 businesses each) |
| `maxResults` | integer | 300 | Hard stop on rows pushed (cost ceiling) |
| `includeWithoutPhone` | boolean | false | Also keep businesses with no published phone |
| `startUrls` | array | — | Explicit listing or profile URLs (advanced) |

Example — electricians in Cluj, 200 rows:

```json
{ "keyword": "instalatii electrice", "city": "CLUJ-NAPOCA", "maxResults": 200 }
```

Example — walk the whole published directory (22,449 profile URLs):

```json
{ "maxResults": 20000 }
```

### Output

| Field | Description |
|---|---|
| `companyName` | Business name |
| `phone` | Full phone number, exactly as published |
| `address` | Street address with postal code |
| `locality` | City / sector, parsed from the profile URL |
| `category` | Activity category (yellow-pages heading) |
| `description` | Business description, up to 1000 characters |
| `detailUrl` / `sourceUrl` | Source profile URL |
| `scrapedAt` | ISO timestamp |

```json
{
  "companyName": "ANTU CONSULTING SRL",
  "phone": "021-424 3925",
  "address": "ŞOS. SALAJ, Nr.132, Bl. 50A, Bucureşti, 5, Cod Postal 51902",
  "locality": "BUCUREŞTI, 5",
  "category": "Cursuri de initiere, perfectionare si calificare",
  "description": "SC Antu Consulting SRL desfasoara activitati de formare continua a adultilor…",
  "detailUrl": "https://www.paginiaurii.ro/companii/BUCURE%C5%9ETI%2C+5/L4307961/ANTU+CONSULTING+SRL/",
  "scrapedAt": "2026-10-14T18:00:00+00:00"
}
```

### Coverage and honest limits

- **No CUI / trade-register number.** Pagini Aurii is an advertising
  directory, not a registry: it has no tax ID and no registration number. To
  attach these phones to registry data you must join on normalised
  name + locality — which is why this Actor is a *contact layer*, not a
  replacement for a CUI-keyed registry scraper.
- **No email.** The site does not publish email addresses; contact is via an
  on-site form. For emails, pair this Actor with a website contact extractor.
- **Coverage** is the directory's advertised-business layer (~22k published
  profile URLs), not all ~1.5M Romanian companies. Businesses that never
  listed with Pagini Aurii are absent.
- Category headings are the directory's own wording, not CAEN codes.

### Notes on politeness and legality

The Actor reads only pages the site publishes to anonymous visitors and
respects `robots.txt` (`/api/`, `/content/` and `search.aspx` query params are
never requested). Requests are rate-limited to ~5 concurrent connections with
a 0.3 s delay. Data is as published by the directory; you are responsible for
using it in line with GDPR and Romanian data-protection rules — business
contact data is generally lawful to process for B2B purposes, but do not
treat this dataset as a consumer marketing list.

# Actor input Schema

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

Business type or activity to search for, e.g. "restaurant", "instalatii electrice", "contabilitate". Leave empty to walk the whole published directory (use city to narrow it).

## `city` (type: `string`):

Romanian city name as published, e.g. CLUJ-NAPOCA, PETRILA, BUCURESTI, 5. Optional.

## `searchPages` (type: `integer`):

How many result pages of a keyword search to walk (10 businesses per page).

## `maxResults` (type: `integer`):

Stop after this many business rows. Each row costs $0.02 — this is your cost ceiling as much as a data cap.

## `includeWithoutPhone` (type: `boolean`):

Off by default: only businesses that publish a phone number are returned (that is ~99% of profile pages).

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

Optional explicit paginiaurii.ro URLs — listing pages (/firmy/...) or company profiles (/companii/...). Overrides keyword/city.

## Actor input object example

```json
{
  "searchPages": 20,
  "maxResults": 300,
  "includeWithoutPhone": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Raw dataset rows (JSON)

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("darknezz/ro-business-contacts-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("darknezz/ro-business-contacts-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 '{}' |
apify call darknezz/ro-business-contacts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,darknezz/ro-business-contacts-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/L28C0hIIigKmkB3T9/builds/JDRqumFzgeD1WTWSe/openapi.json
