Paginas Amarelas Scraper: Portugal Business Phones & Emails
Pricing
from $1.00 / 1,000 business listings
Paginas Amarelas Scraper: Portugal Business Phones & Emails
Scrape Páginas Amarelas (pai.pt) by trade and municipality: business name, phones, address, website, coordinates and opening hours. Turn on emails to get the address the business published or one read 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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 hours ago
Last modified
Categories
Share
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors. This actor ranks #3 for "paginas amarelas" in Apify Store search.
Why choose this actor?
- Emails for three businesses in four. In our proof run (canalizador in Lisboa, 29 Sep 2026) 15 of 20 businesses came back with an email, 14 published on their Páginas Amarelas page and 1 read from the business's own website. Every address is checked for a working mail server first, and you pay for an email only when one is delivered.
- Phones, websites and opening hours the search cards hide. Páginas Amarelas (pai.pt) shows a phone on only about one search card in three, and no website or email at all. The actor opens each business page by default, at no extra charge: in the proof run 18 of 20 rows had a phone, 11 a website and all 20 had coordinates. No pai.pt account, no cookies, no proxy to set up.
- The place you typed, never the whole country. pai.pt searches by its own place id and quietly turns any town name it cannot match into a nationwide search. The actor carries the site's full list of 308 municipalities and 29 districts and islands, and when it cannot place a name it searches nothing and tells you which places the site does know. You are never charged for nationwide rows under a town's name.
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 from the Lisboa search, with their business pages read, in a few seconds:
{"queries": ["canalizador"],"locations": ["Lisboa"],"maxResultsPerSearch": 10}
You can say what you want in three ways, and mix them in one run:
- Queries and locations (
queries,locations): trade words in Portuguese as you would type them on pai.pt, such ascanalizador,dentistaorrestaurante, and places such asLisboa,Vila Nova de Gaia,Distrito de FaroorMadeira. Accents are optional, andLisbon,OportoandGaiawork too. Every query is searched in every location. Leavelocationsempty to search all of Portugal. - A location id in
locations: the number pai.pt puts insearch[location_id], for example20477for the municipality of Lisboa. Any number is read this way, so do not type a postcode: it would be taken as an id and search some other place. - Search pages (
startUrls): a pai.pt search page (https://www.pai.pt/searches?search[query]=...) or a category landing page such ashttps://www.pai.pt/canalizadores-e-picheleiros/lisboa, copied from the address bar. A pasted search page keeps its own place, including a parish (freguesia) you picked on the site.
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
themineworks/paginasamarelas-business-email-scraper on Apify. Returns Portuguese businesses from Páginas Amarelas (pai.pt) by trade and municipality: name, categories, phones, address, coordinates, website, opening hours, services, social links, rating, and optionally an email from the directory or the business website. Call ApifyClient("TOKEN").actor("themineworks/paginasamarelas-business-email-scraper").call(run_input={"queries": ["canalizador"], "locations": ["Lisboa"], "maxResultsPerSearch": 50, "includeEmails": true}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: queries (Portuguese trade words) or startUrls (pai.pt search or landing pages). Optional: locations (municipality, "Distrito de X", island, or pai.pt location id; never a postcode; empty = all of Portugal), maxResultsPerSearch (default 30; the site serves at most 500 per search), includeEmails (default false), includeDetails (default true), sortBy (relevance, ranked or popular; default relevance), openNow (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~paginasamarelas-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, opening hours, description, the services the business lists, its social pages, rating, review count, the email and where it was found, and the search that found the row.
- The business page by default. pai.pt keeps most phones, the website, the email, the full description, services and opening hours on each business's own page. The actor reads it for every row (one more fast request, no extra charge); turn
includeDetailsoff for a faster list of search cards only. - Every place the site can search: 308 municipalities, 18 districts and 11 islands, matched without accents, plus any location id. A name shared by two municipalities (
Calhetais on Madeira and on São Jorge) is not guessed: the search stops and lists both, with their ids. - The site's own filters: sort by relevance, rating or popularity (
sortBy) and keep only businesses open right now (openNow). - Up to 50 queries times 50 locations per run, at most 300 searches. pai.pt serves at most 50 pages of 10, so 500 businesses per search.
- Emails from two places, each checked for a working mail server: the address on the business page first, then the business's own website (homepage, then contact and about pages, at most 5 pages and 20 seconds per site). Up to 5 addresses per row, best first.
How to use it
Basic: one trade in one municipality
{"queries": ["canalizador"],"locations": ["Lisboa"],"maxResultsPerSearch": 100}
pai.pt reported 77 results for this search on 29 Sep 2026. A municipality search returns what the site lists for it, which includes businesses from neighbouring towns: the Lisboa proof run returned addresses in Odivelas, Amadora, Sacavém and Torres Vedras. Every row carries its own city, so filter on it if you need the exact municipality.
Several trades in several places
Every query runs in every location, so this is six searches:
{"queries": ["canalizador", "eletricista", "serralheiro"],"locations": ["Porto", "Distrito de Braga"],"maxResultsPerSearch": 200}
A business found by two of the searches is delivered once and charged once.
Cold email list for a district
Agencies and suppliers selling to Portuguese trades build a list per district with the email turned on:
{"queries": ["dentista"],"locations": ["Distrito de Setubal", "Distrito de Faro"],"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.
Best rated first, and who is open now
Sort the way the site does and keep only businesses open at the time of the run, for example for an emergency service directory:
{"queries": ["desentupimentos"],"locations": ["Lisboa"],"sortBy": "ranked","openNow": true,"maxResultsPerSearch": 50}
openNow depends on the day and hour the run starts, and businesses without published opening hours are left out. Few businesses on pai.pt have reviews (3 of 20 in the proof run).
A fast list of search cards only
When you need names, categories and towns in bulk and not the contact details, turn the business pages off. The run reads one page per 10 businesses instead of 11:
{"queries": ["restaurante"],"locations": ["Porto"],"includeDetails": false,"maxResultsPerSearch": 500}
Without business pages only about one row in three has a phone, few have coordinates, and none has a website. With includeEmails on, the business page is opened anyway.
Read a search you already set up on the site
Paste the page from your browser, from a search or a category page. A search you narrowed to a parish on the site keeps that parish:
{"startUrls": [{ "url": "https://www.pai.pt/searches?search[query]=canalizador&search[location_id]=20477" },{ "url": "https://www.pai.pt/canalizadores-e-picheleiros/lisboa" }],"maxResultsPerSearch": 50}
sortBy and openNow are applied to pasted /searches pages but not to landing pages, which ignore them on the site too. Business pages (/paginas/...) are not search pages and are skipped.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
queries | array of strings | none (prefilled with canalizador) | Trade words to search, one per line, in Portuguese. Up to 50. Needed unless you give startUrls. |
locations | array of strings | empty | A municipality (Lisboa), a district (Distrito de Faro), an island (Madeira) or a pai.pt location id (20477). Not a postcode: numbers are read as location ids. Every query is searched in every location. Empty searches all of Portugal. Up to 50. |
startUrls | array | empty | pai.pt search pages or category landing pages, read instead of or as well as the queries. |
maxResultsPerSearch | integer | 30 | Most businesses per query and location, 1 to 1,000. pai.pt shows 10 per page and serves at most 50 pages, so 500 is the real ceiling. |
includeEmails | boolean | false | Look for each business's email: the address on its pai.pt page first, then its website. Charged only for rows where one is found. |
includeDetails | boolean | true | Open each business's own page for phones, website, coordinates, opening hours, services, social links, rating and the full description. No extra charge. Turn off for search cards only. |
sortBy | string | relevance | relevance (the site's default), ranked (rating) or popular (most popular). |
openNow | boolean | false | Only businesses the site marks as open at the time of the run (aberto agora). |
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(pai.pt's number for the business),listing_url,name,categories(the site's trade headings, in lower case as pai.pt writes them),description,services(what the business lists under its services),rating(in half stars, as the site draws it),review_count,opening_hours(for exampleMo 09:00-12:00, 14:00-18:00; closed days left out)
Contact
phone(the first number) andphones(all of them), in international format such as+351 21 044 5812;website;social_links(Facebook, Instagram and other pages the business links)
Address and map
address(one line),street,postal_code(the full1234-567form),city,country(PT),latitude,longitude
Email (with includeEmails on)
email(the best address),emails(up to 5, best first),email_source(directoryorwebsite) andemail_source_url(the page it was read from)
Search context
source_site(pai.pt),search_query,search_location,scraped_at
Fill rates in the proof run (20 businesses, business pages and emails on): categories, address, town and coordinates 20 each, phone 18, street 14, postcode 13, website 11, description 11, services 9, opening hours 8, rating 3, social links 2, email 15. Some businesses give only a town as their address, so street and postal_code are missing on those rows. Coordinates are the pin pai.pt stores for the business; the actor does not check them against the street address.
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 | pai.pt's number for the business, the same in every run |
listing_url | Link to the business page on pai.pt |
name | Business name as listed |
categories | List of the site's trade headings |
address | The address on one line (sometimes just the town) |
city | Town as the site gives it |
country | Always PT |
source_site | Always pai.pt |
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 because business pages were on (the default); from search cards alone, only a minority of rows have them.
Output examples
Real rows from the proof run on 29 Sep 2026 (canalizador in Lisboa, emails on), trimmed: some fields are left out, and opening hours, descriptions and services are shortened.
An email published on the directory, with website, rating and services:
{"listing_id": "691542","listing_url": "https://www.pai.pt/paginas/691542-hidroclean-canalizacao","name": "HidroClean Canalização","categories": ["canalizadores e picheleiros"],"phone": "+351 966 367 955","phones": ["+351 966 367 955"],"address": "Rua das Fontaínhas 51, 2700-391 Amadora","street": "Rua das Fontaínhas 51","postal_code": "2700-391","city": "Amadora","country": "PT","latitude": 38.7506,"longitude": -9.2165,"website": "https://www.hidroclean.pt","email": "comercialhidroclean@gmail.com","emails": ["comercialhidroclean@gmail.com"],"email_source": "directory","email_source_url": "https://www.pai.pt/paginas/691542-hidroclean-canalizacao","rating": 5,"review_count": 1,"opening_hours": ["Mo 00:00-24:00", "Tu 00:00-24:00"],"description": "A solução definitiva para suas necessidades de canalização.","services": ["Deteção de Fuga de Água", "Substituição de Prumada", "Desentupimento"],"source_site": "pai.pt","search_query": "canalizador","search_location": "Lisboa","scraped_at": "2026-09-29T09:32:51.219Z"}
An email read from the business's own website, on its contact page:
{"listing_id": "352992","listing_url": "https://www.pai.pt/paginas/352992-abrantina-canalizadores","name": "Abrantina Canalizadores","phone": "+351 930 531 963","address": "Rua Heróis de Chaimite, Odivelas","street": "Rua Heróis de Chaimite","city": "Odivelas","latitude": 38.7961,"longitude": -9.1696,"website": "http://www.abrantina.pt","email": "info@abrantina.pt","emails": ["info@abrantina.pt"],"email_source": "website","email_source_url": "https://www.abrantina.pt/contactos/"}
A business with only a town as its address, 16 reviews and 9 services (shortened here):
{"listing_id": "458703","name": "DON Serviços","phone": "+351 937 021 541","address": "Lisboa","city": "Lisboa","email": "donservicos@gmail.com","email_source": "directory","rating": 4.5,"review_count": 16,"opening_hours": ["Mo 00:00-24:00", "Su 00:00-24:00"],"services": ["Desentupimentos", "Vídeo Inspeção", "Canalização"]}
A business with no phone, no website and no email, only its Facebook page:
{"listing_id": "644532","name": "Alcobia & Fernandes Lda","address": "Avenida Padre Bartolomeu de Gusmão 15-A, 2720-425 Amadora","postal_code": "2720-425","city": "Amadora","latitude": 38.7459,"longitude": -9.2163,"social_links": ["http://www.facebook.com/alcobiaefernandes"]}
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:02.382Z"}
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 and the proof run's rate (15 of 20), expect about 750 emails at $0.025, so about $18.75 more. Reading the business pages is included either way.
Never charged:
- search pages the site refused, and the retries through the unblocking proxy;
- business pages and websites that were opened, including those that gave no email (a row without an email is charged as a business only);
- a business already delivered by another search in the run, or the same business under a second listing id;
- the recommended cards pai.pt shows on a search with no results, and nationwide results for a place the actor could not match (they are not delivered at all);
- 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), and, with
verifyEmailDomainon, an address on a domain with no mail server (dropped before delivery); - the note row and the
OUTPUTrun 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 Amarelas?
Portugal's yellow pages, at www.pai.pt (paginasamarelas.pt redirects there). It lists tradespeople, clinics, shops, restaurants and companies across mainland Portugal, Madeira and the Azores, with phone, address, website, opening hours and often an email. It is not the Spanish Páginas Amarillas (paginasamarillas.es), a different directory with its own actor.
How many businesses can I get?
pai.pt reports at most 500 results for one search and serves 50 pages of 10, so 500 per search, and up to 300 searches per run (50 queries times 50 locations, capped at 300). For a common trade, search municipality by municipality, or more specific trade words, instead of the whole country.
How fresh is the data?
Every run reads pai.pt live; nothing comes from a cache. scraped_at on each row says when it was read.
Do I need a Páginas Amarelas 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. pai.pt answers a plain 403 to a home internet connection (checked again from a home connection on 1 Oct 2026), but it serves Apify's datacenter proxies, which the actor uses with a connection that looks like a normal Chrome browser. In the proof run all 22 requests (2 search pages and 20 business pages) passed on the first try. If a search page is still refused after several tries, 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. In the proof run 15 of 20 rows had one. Of the 5 without, 2 businesses had no website, 2 had a website with no email on it, and 1 website did not load. 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 published on its pai.pt page (the "Enviar email" link). A website email is read from the business's own homepage, contact or about page, and kept only when it is on the business's own domain or on an ordinary provider such as gmail.com, hotmail.com or sapo.pt; the address of the agency that built the site is dropped. Both go through the same mail server check when verifyEmailDomain is on.
What do I type into Locations?
A municipality (Lisboa, Porto, Braga, Cascais, Vila Nova de Gaia; accents optional), a whole district (Distrito de Setubal), an island (Madeira, Sao Miguel), or a pai.pt location id. Not a postcode: a number is read as a location id, so 1000 searches whatever place has that id. Leave it empty to search all of Portugal.
Why did a search return nothing?
Usually the place. pai.pt only searches by its own place id and would search the whole country for a name it cannot match, so the actor stops instead and writes the site's suggestions, with their ids, in the run summary. A name two municipalities share, such as Calheta, stops the same way. Type the exact municipality, Distrito de <name>, or the id. A search with no results costs nothing beyond the run's start fee.
Why are there businesses from other towns?
pai.pt fills a municipality search with businesses from neighbouring towns, as it does for visitors. Every row shows its own city. Every business on this directory carries the site's "Patrocinado" (sponsored) mark, so it tells you nothing and is not returned as a field.
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/paginasamarelas-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 paginasamarelas-business-email-scraper "https://mcp.apify.com/?tools=themineworks/paginasamarelas-business-email-scraper".
Is it legal to scrape Páginas Amarelas?
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 Páginas Amarelas.
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
- Skip Trace Lookup
- Google Maps Email Scraper
- JustDial Scraper
- 2GIS Places Scraper
- IndiaMART Scraper
- Yandex Maps Scraper
- Contact Details Scraper
- US Business Registry
- Google Maps Scraper
- Yellow Pages Scraper
- Lead Generation MCP
Social media and video
Marketing, SEO and reviews
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.
Paginas Amarelas Scraper turns any pai.pt search into rows of Portuguese businesses with phone, address, coordinates, website, opening hours and, when you want it, an email checked for a working mail server.

