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

Páginas Amarillas Scraper: Spain Business Leads & Emails

Pricing

from $1.00 / 1,000 business listings

Go to Apify Store
Páginas Amarillas Scraper: Spain Business Leads & Emails

Páginas Amarillas Scraper: Spain Business Leads & Emails

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.

Pricing

from $1.00 / 1,000 business listings

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 hours ago

Last modified

Share

20 Spanish businesses in 42 seconds, emails on

From The Mine Works, makers of Threads Scraper and 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

Part of The Mine Works Leads and business directories family: B2B Leads Finder, Skip Trace Lookup, Google Maps Email Scraper, JustDial Scraper, 2GIS Places Scraper, IndiaMART Scraper.

Try it in one minute

Paste this input and press Start. It returns 10 plumbers in Getafe, without emails:

{
"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

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

{
"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:

{
"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:

{
"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:

{
"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):

{
"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:

{
"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

ParameterTypeDefaultWhat it does
queriesarray of stringsnone (prefilled with fontaneros)Trade words to search, one per line, in Spanish. Up to 50. Needed unless you give startUrls.
locationsarray of stringsnone (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.
startUrlsarrayemptyResults pages from www.paginasamarillas.es (/search/...), read instead of or as well as the queries.
maxResultsPerSearchinteger30Most businesses per query and location, 1 to 1,000. The site shows up to 30 per page.
includeEmailsbooleanfalseRead each business's own website for an email. Charged only for rows where one is found. Businesses without a website get none.
verifyEmailDomainbooleantrueKeep 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:

FieldWhat it holds
listing_idThe site's id for the business, the same in every run
listing_urlLink to the business page on paginasamarillas.es
nameBusiness name as listed
categoriesThe activity the site lists for the business
addressStreet, postcode and town on one line
postal_codeFive digit Spanish postcode
cityThe town
regionThe province
countryAlways ES
source_siteAlways paginasamarillas.es
search_queryThe query or pasted search that found the row
scraped_atWhen 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:

{
"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):

{
"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):

{
"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):

{
"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):

{
"_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.

EventFree planStarter (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.

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?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/paginasamarillas-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 paginasamarillas-business-email-scraper "https://mcp.apify.com/?tools=themineworks/paginasamarillas-business-email-scraper".

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

Social media and video

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

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.