Package Information
Documentation
n8n-nodes-website-email-phone-finder
An n8n community node for finding website email addresses, phone numbers, and useful links from website domains using an Apify Actor.
This node is useful for lead generation, business contact discovery, CRM enrichment, and saving website contact data into tools like PostgreSQL, Google Sheets, Airtable, or any other n8n-supported app.
Features
- Find email addresses from website domains
- Find phone numbers from websites
- Extract useful website links
- Run an Apify Actor directly from n8n
- Use secure Apify API credentials inside n8n
- Supports multiple domains in one run
- Returns clean JSON output
- Can be connected with PostgreSQL, Google Sheets, Airtable, CRM tools, Slack, Email, and more
How it works
The node sends website domains to an Apify Actor.
The Apify Actor does the scraping work and returns contact information.
Simple flow:
n8n Workflow
↓
Apify Website Email & Phone Finder Node
↓
Apify Actor
↓
Dataset Results
↓
n8n Output
Example workflow
Manual Trigger
↓
Apify Website Email & Phone Finder
↓
Code Node
↓
PostgreSQL
Installation
Install from n8n Community Nodes
In your n8n instance:
Settings
↓
Community Nodes
↓
Install
Enter package name:
n8n-nodes-website-email-phone-finder
Then click install.
After installation, restart n8n if required.
Credentials
This node uses Apify API token authentication.
Where to get Apify API token
Go to your Apify account:
Apify Console
↓
Settings
↓
Integrations
↓
API Token
↓
Copy token
How to add token in n8n
In n8n:
Credentials
↓
New Credential
↓
Apify API
↓
Paste your Apify API token
↓
Save
Then select this credential inside the node.
Do not paste the Apify API token directly into node input fields. Always save it as an n8n credential.
Node Name
After installation, search for this node in n8n:
Apify Website Email & Phone Finder
You can search using:
WebsiteEmailPhoneApify
Input
The node accepts one or more website domains.
Example domains:
centralrestaurante.com
disfrutarbarcelona.com
diverxo.com
asadorretxebarri.com
alchemist.dk
In the node, open the Domains field and add values one by one.
Example Input
{
"domains": [
"centralrestaurante.com",
"disfrutarbarcelona.com",
"diverxo.com"
]
}
Example Output
The node returns data similar to this:
{
"domain": "centralrestaurante.com",
"emails": [
"reserva@centralrestaurante.com",
"facturaciontermain@centralrestaurante.com.pe"
],
"phoneNumbers": [
"+5112428575"
],
"links": [
"https://centralrestaurante.com.pe/en/",
"https://centralrestaurante.com.pe/en/privacy"
]
}
Recommended n8n Workflow
Basic workflow
Manual Trigger
↓
Apify Website Email & Phone Finder
Use this for testing the node.
Save results into PostgreSQL
Recommended workflow:
Manual Trigger
↓
Apify Website Email & Phone Finder
↓
Code Node
↓
PostgreSQL
The Apify node returns arrays like:
emails
phoneNumbers
links
For PostgreSQL, it is better to flatten the output before inserting rows.
Code Node Example for PostgreSQL
Add a Code node after this node and use Run Once for All Items mode.
Paste this code:
const output = [];
for (const item of $input.all()) {
const data = item.json;
const domain = data.domain || '';
const emails = Array.isArray(data.emails) ? data.emails : [];
const phoneNumbers = Array.isArray(data.phoneNumbers) ? data.phoneNumbers : [];
const links = Array.isArray(data.links) ? data.links : [];
if (emails.length === 0) {
output.push({
json: {
domain,
email: '',
phoneNumber: phoneNumbers[0] || '',
links: links.join(', '),
status: 'NO_EMAIL_FOUND',
},
});
continue;
}
for (const email of emails) {
output.push({
json: {
domain,
email,
phoneNumber: phoneNumbers[0] || '',
links: links.join(', '),
status: 'FOUND',
},
});
}
}
return output;
After this Code node, the output will be easier to save in PostgreSQL.
Example output after Code node:
{
"domain": "centralrestaurante.com",
"email": "reserva@centralrestaurante.com",
"phoneNumber": "+5112428575",
"links": "https://centralrestaurante.com.pe/en/, https://centralrestaurante.com.pe/en/privacy",
"status": "FOUND"
}
PostgreSQL Table Example
Create a table like this:
CREATE TABLE website_email_phone_leads (
id SERIAL PRIMARY KEY,
domain TEXT,
email TEXT,
phone_number TEXT,
links TEXT,
status TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
In the PostgreSQL node, map fields like this:
domain → {{ $json.domain }}
email → {{ $json.email }}
phone_number → {{ $json.phoneNumber }}
links → {{ $json.links }}
status → {{ $json.status }}
Common Issues
Node not visible in n8n
Restart n8n after installing the package.
Search using:
WebsiteEmailPhoneApify
Invalid Apify token
If you get unauthorized errors, check your Apify API token.
Make sure the token belongs to the Apify account that has access to the Actor.
Empty result
If no emails are returned:
- Check if the domain is correct
- Try the same domain in Apify Console
- Some websites may not publicly show email addresses
- Some websites may block scraping
PostgreSQL values showing undefined
This happens if you map the wrong field names.
The direct node output has:
domain
emails
phoneNumbers
links
But PostgreSQL usually needs simple fields like:
domain
email
phoneNumber
links
status
Use the Code node example above to flatten the data before inserting into PostgreSQL.
Local Development
Clone the project:
git clone https://gitlab.com/YOUR_GITLAB_USERNAME/n8n-nodes-website-email-phone-finder.git
cd n8n-nodes-website-email-phone-finder
Install dependencies:
npm install
Build:
npm run build
Link locally:
npm link
Go to your n8n custom folder:
cd ~/.n8n/custom
npm link n8n-nodes-website-email-phone-finder
Start n8n:
npx n8n start
For Windows PowerShell:
cd C:\Users\YOUR_USERNAME\.n8n\custom
npm link n8n-nodes-website-email-phone-finder
npx n8n start
Package
npm package name:
n8n-nodes-website-email-phone-finder
Based on Apify Actor
This node runs an Apify Actor for website email and phone number extraction.
Actor link:
YOUR_APIFY_ACTOR_LINK
License
MIT
Author
YOUR_NAME_OR_COMPANY
