# Páginas Amarillas Scraper: Spain Business Leads & Emails (`themineworks/paginasamarillas-business-email-scraper`) Actor

Scrape Páginas Amarillas (paginasamarillas.es) by trade and Spanish town: business name, activity, address, coordinates, website, description and the phone where the listing shows it. Turn on emails to read each business's address from its own website, charged only when found. Pay per business.

- **URL**: https://apify.com/themineworks/paginasamarillas-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

## Páginas Amarillas Scraper: Spain Business Leads & Emails

[![20 Spanish businesses in 42 seconds, emails on](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/paginasamarillas-business-email-scraper-hero.png)](https://console.apify.com/actors/7DGvGta43tbBYV83h/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 "spain business" in Apify Store search.

### Why choose this actor?

- **Gets through the site's bot wall for you.** Páginas Amarillas (paginasamarillas.es) sits behind Imperva, which answers ordinary datacenter requests with a challenge page. The actor reads every results page through Apify's unblocking proxy, and that cost is in the price: our proof run (fontanero in Getafe, 29 Sep 2026) returned **20 businesses in 42 seconds**, including the email lookups, with nothing to set up. No account, no cookies.
- **Only businesses in the town you asked for.** The results page mixes in paid adverts for businesses in other provinces and repair networks' listings for other towns. The actor drops paid cards that are not in your town and delivers each business once, so all 20 proof rows were in Getafe, each with street, postcode, province and map coordinates.
- **Pay for an email only when one is found.** The site shows no email addresses, so the actor reads each business's own website, respecting that website's robots.txt, and charges only for a delivered address on a domain that receives mail. Be realistic about the rate: in urgent repair trades few businesses publish one (1 of 20 in the proof run), so leave emails off when you only need the list.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/7DGvGta43tbBYV83h/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 plumbers in Getafe, without emails:

```json
{
  "queries": ["fontanero"],
  "locations": ["Getafe"],
  "maxResultsPerSearch": 10
}
```

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

- **Queries and locations** (`queries`, `locations`): Spanish trade words as you would type them on the site, such as `fontaneros`, `electricistas`, `dentistas` or `abogados`, and a Spanish town or city for each, such as `Madrid`, `Getafe` or `Alcalá de Henares`. A location is required: the site searches by town. Accents and capitals do not matter, and `Getafe (Madrid)` works as well as `Getafe`.
- **Search pages** (`startUrls`): a results page copied from the address bar, such as `https://www.paginasamarillas.es/search/fontaneros/all-ma/all-pr/all-is/getafe/all-ba/all-pu/all-nc/1`. It needs no location.

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.

#### Copy to your AI assistant

```text
themineworks/paginasamarillas-business-email-scraper on Apify. Returns Spanish businesses from Páginas Amarillas (paginasamarillas.es) by trade and town: name, activity, address, province, district, coordinates, website, description, the phone where the results show it, a sponsored flag, and optionally an email read from the business website. Call ApifyClient("TOKEN").actor("themineworks/paginasamarillas-business-email-scraper").call(run_input={"queries": ["fontaneros"], "locations": ["Getafe"], "maxResultsPerSearch": 60}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: queries (Spanish trade words) with locations (Spanish towns; the site searches by town), or startUrls (paginasamarillas.es /search/ pages). Optional: maxResultsPerSearch (default 30, 1 to 1000, 30 per page), includeEmails (default false), verifyEmailDomain (default true). Rows with _type "info" are notes, not businesses. Full spec: GET https://api.apify.com/v2/acts/themineworks~paginasamarillas-business-email-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations
```

### Key features

- **Up to 29 fields per business**: name, activity, phone in international format where shown, street, postcode, town, district, province, coordinates, website, description, the sponsored flag, the email and where it was found, and the search that found the row.
- **Up to 30 businesses a page**, read page by page until your number is reached or the results end, with the total the site reports for each search in the run summary (38 for fontanero in Getafe on 29 Sep 2026).
- **Town results only.** Paid cards whose address and listing link both point to another town are dropped, a town the site does not recognise returns nothing (never the whole country under that name), and a business that two searches or two cards share is delivered once.
- **Up to 50 queries times 50 locations per run**, at most 300 searches, and up to 1,000 businesses per search.
- **robots.txt respected.** The site's robots.txt is read fresh at the start of every run and every page is checked against it, and so is each business website's robots.txt before the email finder opens it.
- **Emails from the business website**: homepage, then contact, legal and about pages (such as `/contacto`, `/aviso-legal`, `/quienes-somos`), at most 5 pages and 20 seconds per site, kept only on the business's own domain or an ordinary provider, and checked for a working mail server.

### How to use it

#### Basic: one trade in one town

```json
{
  "queries": ["fontaneros"],
  "locations": ["Madrid"],
  "maxResultsPerSearch": 90
}
```

90 businesses are three pages of 30. The site reads your words as it would from its own search box, so `fontanero` and `fontaneros` can return different numbers; the run summary shows the total the site reports for each.

#### Several trades in several towns

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

```json
{
  "queries": ["electricistas", "cerrajeros", "pintores"],
  "locations": ["Valencia", "Alicante"],
  "maxResultsPerSearch": 150
}
```

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

#### A lead list with websites for your own enrichment

Many agencies and suppliers want the website, not a guessed email, and run their own enrichment afterwards. Leave emails off, and keep the rows that have a `website`:

```json
{
  "queries": ["clínicas dentales", "fisioterapeutas"],
  "locations": ["Barcelona", "Sabadell", "Terrassa"],
  "maxResultsPerSearch": 300
}
```

In the proof run, the paid listings carried a website and the free listings a phone, so filter on whichever your outreach needs. 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.

#### Emails for trades that run their own websites

Turn emails on where businesses tend to have their own website and publish an address on it (clinics, law firms, shops), rather than for urgent repair trades:

```json
{
  "queries": ["abogados"],
  "locations": ["Sevilla"],
  "maxResultsPerSearch": 60,
  "includeEmails": true
}
```

Each row with an email carries `email_source` (always `website` on this site) and `email_source_url`, the page the address was read from. A row without one costs the business price only.

#### Map of businesses in a town

Every proof row had coordinates from the map on the results page, and rows in a district carry it in `district` (for example `El Bercial` in Getafe):

```json
{
  "queries": ["talleres mecánicos"],
  "locations": ["Getafe", "Leganés", "Fuenlabrada"],
  "maxResultsPerSearch": 200
}
```

Plot `latitude` and `longitude`, or group by `postal_code` and `district`.

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

Paste the results page from your browser:

```json
{
  "startUrls": [
    { "url": "https://www.paginasamarillas.es/search/fontaneros/all-ma/all-pr/all-is/getafe/all-ba/all-pu/all-nc/1" }
  ],
  "maxResultsPerSearch": 60
}
```

Each page is read from its first page on. Business pages (`/f/...`) are not search pages and are skipped.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `queries` | array of strings | none (prefilled with `fontaneros`) | Trade words to search, one per line, in Spanish. Up to 50. Needed unless you give `startUrls`. |
| `locations` | array of strings | none (prefilled with `Madrid`) | Spanish towns or cities, typed as on the site, for example `Getafe`. Required with `queries`: the site searches by town. Every query is searched in every location. Up to 50. |
| `startUrls` | array | empty | Results pages from www.paginasamarillas.es (`/search/...`), 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 up to 30 per page. |
| `includeEmails` | boolean | `false` | Read each business's own website for an email. Charged only for rows where one is found. Businesses without a website get none. |
| `verifyEmailDomain` | boolean | `true` | Keep an email only when its domain has a mail server. |

A query without a location is dropped with a note before any request. A run with nothing to search 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, which includes the town, such as `getafe/marial-cabanas-s-l-_224432088_000000001`), `listing_url`, `name`, `categories` (the activity the site lists, such as `Fontanerías`), `description` (the short text on the card), `sponsored` (`true` on the adverts the site places at the top)

**Contact**

- `phone` and `phones`, in international format such as `+34 914 72 29 31`, where the results page shows them; `website`

**Address and map**

- `address` (one line), `street`, `postal_code`, `city`, `district` (a neighbourhood inside the town, when the listing gives one), `region` (the province), `country` (`ES`), `latitude`, `longitude`

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

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

**Search context**

- `source_site` (`paginasamarillas.es`), `search_query`, `search_location`, `scraped_at`

Fill rates in the proof run (20 businesses): categories, full address, province and coordinates 20 each, description 16, website 10, phone 10, district 3, email 1. The phone and the website rarely come together: free listings show their phone on the results page, while paid listings hide it behind a "Ver teléfono" button that loads it one business at a time, which the actor does not press, so paid rows come with their website instead.

#### Stable fields for automations

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

| Field | What it holds |
|---|---|
| `listing_id` | The site's id for the business, the same in every run |
| `listing_url` | Link to the business page on paginasamarillas.es |
| `name` | Business name as listed |
| `categories` | The activity the site lists for the business |
| `address` | Street, postcode and town on one line |
| `postal_code` | Five digit Spanish postcode |
| `city` | The town |
| `region` | The province |
| `country` | Always `ES` |
| `source_site` | Always `paginasamarillas.es` |
| `search_query` | The query or pasted search that found the row |
| `scraped_at` | When the row was read (ISO 8601) |

`latitude` and `longitude` were in all 20 rows too, read from the map on the results page; check for them before you rely on them.

#### Output examples

Real rows from the proof run on 29 Sep 2026 (fontanero in Getafe, emails on), trimmed where noted.

A free listing with its phone shown on the results page:

```json
{
  "listing_id": "getafe/marial-cabanas-s-l-_224432088_000000001",
  "listing_url": "https://www.paginasamarillas.es/f/getafe/marial-cabanas-s-l-_224432088_000000001.html",
  "name": "Marial Cabanas S.L.",
  "categories": ["Fontanerías"],
  "phone": "+34 914 72 29 31",
  "phones": ["+34 914 72 29 31"],
  "address": "Gorrión, S/N, 28904 Getafe",
  "street": "Gorrión, S/N",
  "postal_code": "28904",
  "city": "Getafe",
  "region": "Madrid",
  "country": "ES",
  "latitude": 40.308275,
  "longitude": -3.737795,
  "source_site": "paginasamarillas.es",
  "search_query": "fontanero",
  "search_location": "Getafe",
  "scraped_at": "2026-09-29T09:33:24.851Z"
}
```

A paid listing with a website, and an email the actor read on that website (description trimmed):

```json
{
  "listing_id": "getafe/rdh-reparaciones-del-hogar_FXhWuWDKWF",
  "listing_url": "https://www.paginasamarillas.es/f/getafe/rdh-reparaciones-del-hogar_FXhWuWDKWF.html",
  "name": "Rdh Reparaciones del Hogar",
  "categories": ["Multiservicios: empresas"],
  "address": "Calle de la Tecnología, 2, 28906 Getafe",
  "postal_code": "28906",
  "city": "Getafe",
  "region": "Madrid",
  "latitude": 40.319913062,
  "longitude": -3.682600282,
  "website": "http://reparaciones-del-hogar.com/fontaneros/",
  "email": "info@reparaciones-del-hogar.com",
  "emails": ["info@reparaciones-del-hogar.com"],
  "email_source": "website",
  "email_source_url": "http://reparaciones-del-hogar.com/",
  "description": "FONTANEROS (Urgencias 24H y festivos). Averías en general, desatascos, humedades, roturas."
}
```

The top advert, marked `sponsored` (trimmed):

```json
{
  "listing_id": "getafe/urgeclick-reparaciones_ciilAGBU1y",
  "name": "Urgeclick Reparaciones",
  "categories": ["Multiservicios: empresas"],
  "address": "Calle Madrid, 114, 28903 Getafe",
  "city": "Getafe",
  "region": "Madrid",
  "website": "https://asistencia-hogar.com",
  "sponsored": true
}
```

A business in a district of the town (trimmed):

```json
{
  "listing_id": "el-bercial/exito-omega_219965423_000000001",
  "name": "Exito Omega",
  "categories": ["Fontanería: instalaciones industriales"],
  "phone": "+34 662 00 34 42",
  "address": "Avenida Perú (El Bercial-Universidad), 4 6-B, 28905 Getafe",
  "postal_code": "28905",
  "city": "Getafe",
  "district": "El Bercial",
  "region": "Madrid",
  "latitude": 40.296374501,
  "longitude": -3.749339083
}
```

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:27.260Z"
}
```

### 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 29 Sep 2026, and no change is scheduled as of 1 Oct 2026. The Pricing tab always shows the rate for your own plan.

The unblocking proxy that every results page needs is included in these prices. A worked example on the Starter plan: 1,000 businesses with emails off cost $1.70 plus $0.005. With emails on, you add $0.025 only for each row that comes back with an email; at the proof run's rate (1 in 20) that is about $1.25 more per 1,000 businesses.

Never charged:

- results pages the site refused, and the retries through the unblocking proxy;
- paid adverts for businesses in other towns (they are not delivered), and a search for a town the site does not recognise;
- a business already delivered by another search or another card in the run, or the same business under a second listing id;
- websites that were opened but gave no email, and websites the actor did not open because their robots.txt forbids it or cannot be read (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 repair network's branches (it is still delivered on every row), and, with `verifyEmailDomain` on, an address on a domain with no mail server;
- 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 is Páginas Amarillas?

Spain's yellow pages, at www.paginasamarillas.es. It lists tradespeople, clinics, shops, restaurants and companies across Spain, searched by trade and town, with address, map position, phone or website, and a short description. It is not Páginas Amarelas of Portugal (pai.pt), a different directory with its own actor.

#### 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 run summary shows the total the site reports for each search. For a big city, split by trade words, or search the neighbouring towns one by one.

#### 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 Páginas Amarillas account, cookies or an API key?

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

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

No. Páginas Amarillas protects every page with Imperva, and Apify's datacenter proxies get its challenge page, so the actor reads the results pages through Apify's unblocking proxy, which is included in the price. In the proof run the one results page came through on the first try. Business websites, read for emails, are fetched directly, retried once over the datacenter proxy when refused, and never sent through the unblocking proxy.

#### Does the actor follow robots.txt?

Yes. It reads the site's robots.txt at the start of every run (over the datacenter proxy, which Imperva lets through for that file; in the proof run it had 38 rules for all crawlers) and checks every request and every page it lands on against it. The results pages it reads are allowed. If robots.txt cannot be read, it uses a copy saved on 29 Sep 2026. When emails are on, it also reads each business website's robots.txt and skips any page the website forbids, or the whole website when its robots.txt cannot be read.

#### Why do some rows have no phone number?

Páginas Amarillas shows the phone of free listings on the results page, and hides the phone of paid listings behind a "Ver teléfono" button that loads it one business at a time through the same protection. The actor delivers what the results page shows, so paid rows come without a phone but with their website and address. In the proof run 10 of 20 rows had a phone and the other 10 a website.

#### Will every business have an email?

No, and in some trades few will. The site shows no email addresses (its "Contactar" button is a form), so the only source is the business's own website. In the proof run (plumbers in Getafe) 10 rows had no website, and of the 10 websites, 1 gave an address, 7 showed none on their own domain (repair networks often list a shared or third party address, which the actor drops) and 2 did not load. Trades where businesses run their own websites (clinics, law firms, shops) should do better; we have not measured them. You pay nothing extra for a row without an email.

#### Why are there repair companies under a plumbing search?

For urgent trades (fontaneros, cerrajeros, electricistas), the site sells the top of the first page to repair networks, listed under the activity "Multiservicios: empresas", often one advert per branch address. They are what the site shows for your town and are delivered as listed. Their adverts that belong to other towns are left out. Filter on `categories` or `sponsored` if you want only the trade's own listings.

#### Why did a search return nothing?

Usually the town. If the site does not recognise it, the actor stops the search, says so in the run summary, and delivers nothing, instead of results from the whole country under that town's name. Type the town as the site spells it, for example `Alcalá de Henares`. A search with no results costs nothing beyond the run's start fee.

#### 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?

Yes. Add it to Claude Code in one line:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=themineworks/paginasamarillas-business-email-scraper"
```

or point any MCP client at `https://mcp.apify.com/?tools=themineworks/paginasamarillas-business-email-scraper`. The "Copy to your AI assistant" block above gives an agent everything it needs to call the actor directly.

#### Is it legal to scrape Páginas Amarillas?

The actor collects only publicly visible business listings, never signs in, and follows the site's robots.txt. 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 Páginas Amarillas.

### 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)

### 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.

*Páginas Amarillas Scraper reads any paginasamarillas.es search through the site's bot protection and returns the town's businesses with address, map position, phone or website and, when you want it, an email from the business's own website.*

# Actor input Schema

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

Business types or trades to search, one per line, for example fontaneros. 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`):

Spanish town or city, one per line, typed the way you would on paginasamarillas.es, for example Madrid, Getafe, Alcalá de Henares. Required: the site searches by town. Up to 50 per run.

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

Optional. Paste search result pages from www.paginasamarillas.es 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 30 per page, so 100 businesses take about 4 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.

## `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.

## Actor input object example

```json
{
  "queries": [
    "fontaneros"
  ],
  "locations": [
    "Madrid"
  ],
  "maxResultsPerSearch": 30,
  "includeEmails": false,
  "verifyEmailDomain": 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": [
        "fontaneros"
    ],
    "locations": [
        "Madrid"
    ],
    "maxResultsPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/paginasamarillas-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": ["fontaneros"],
    "locations": ["Madrid"],
    "maxResultsPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/paginasamarillas-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": [
    "fontaneros"
  ],
  "locations": [
    "Madrid"
  ],
  "maxResultsPerSearch": 30
}' |
apify call themineworks/paginasamarillas-business-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/paginasamarillas-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/7DGvGta43tbBYV83h/builds/rFgd6ccOxwUiKhNVp/openapi.json
