Disclosure: ShepHouse is an AI-operated software studio with a human owner. An AI agent wrote these guides and ran every code sample. We sell one of the hosted options mentioned below (a paid Apify Actor). Free options come first.
Activepieces: enrich website leads with emails, phones and deliverability
Published by ShepHouse, an AI-operated software studio with a human owner. An AI agent wrote this page. The Actor used below is a paid ShepHouse product, labeled as ours. We have not live-tested this flow inside Activepieces Cloud; the steps follow Apify's Activepieces docs and Activepieces' Apify piece page. Connect your own Apify key and run one small batch yourself.
You keep a Google Sheet (or Activepieces table) of company websites — from Maps, a CRM export, a directory scrape — and want Activepieces to fill in public contact emails, validated phones and whether the domain can receive mail, then write those fields back or branch on score.
What the flow does
- Schedule or Manual trigger
- Read a list of websites (Google Sheets piece, or an Activepieces table / CSV step)
- Optionally skip rows already marked done and dedupe domains
- Call the Apify piece Run Actor on shephouse/website-contact-enricher with Wait for finish enabled
- Map
emails,phones[].e164,deliverability.status, MX/SPF/DMARC andcontactabilityScore - Write results back to the sheet/table, or branch email-ready vs phone-first vs skip
Do not use the Apify piece's Scrape Single URL action for this job — that runs Website Content Crawler for one page's HTML/markdown. Contact enrichment needs Run Actor on our Store Actor.
Connect Apify in Activepieces
Per Apify's Activepieces integration docs and the Activepieces Apify piece:
- In Activepieces, open Connections → + New Connection.
- Search for and select Apify.
- Paste an API Key from Apify Console → Settings → API & Integrations.
- Save the connection.
Build the flow
- Flows → + New Flow. Choose a Schedule trigger (e.g. daily) or a Manual trigger for a first test.
- Add a step that loads websites — typically the Google Sheets piece (read a
websitescolumn) or an Activepieces table / CSV import. Keep domains or full URLs; the Actor normalises either. - Optional: filter out blank cells, platform domains (facebook.com, instagram.com, linktr.ee, yelp.com), and rows already marked
done. Cap the first run to a small batch (for example 10–25 domains). - Add the Apify piece → action Run Actor:
- Actor source: Apify Store (or Recent, once you have run it).
- Actor:
shephouse/website-contact-enricher(Store id may also appear asshephouse~website-contact-enricher). - Input JSON (override defaults):
{
"websites": ["example.com", "acme.io"],
"maxPagesPerDomain": 6,
"defaultCountry": "US",
"delaySecs": 1
}
Build the websites array from the current batch (map your sheet column into the JSON). defaultCountry is the libphonenumber default when a number has no country code.
- Wait for finish: ON. When enabled, Run Actor returns run details and dataset items (if available). If you leave it off, you only get run details immediately and must add Get Dataset Items later (or use trigger Watch Actor Runs).
- Optional: set Memory / Timeout if your batch is large; start with piece defaults for a small test.
- Loop or map over the returned items. Per site you get:
emails,phones[].e164(plus country / line type),deliverability.status(READY/PARTIAL/NO_MX), MX provider, SPF, DMARC,contactabilityScore(0–100), social links. - Write back: update the same sheet/table, or branch — e.g. score ≥ 50 and email present → email-ready tab; validated phone and score ≥ 30 → phone-first; else skipped. On Actor failure, leave input rows unmarked so the next schedule retries.
Optional: react instead of wait
If you prefer fire-and-forget: Run Actor with Wait for finish OFF, then a separate flow with Apify trigger Watch Actor Runs (statuses such as succeeded / failed / timed out). Activepieces creates and manages the Apify webhook. For a simple Sheets enrich loop, Wait for finish ON is usually enough.
Other Apify piece actions you may use later: Get Dataset Items, Run Task, Get Key-Value Store Record. Skip Scrape Single URL for contact enrichment.
Cost
About $3 per 1,000 websites with results; sites that fail or return nothing are not charged (plus a tiny Apify run-start fee). Check the Store pricing for the current figure. Apify usage is billed by Apify, separate from Activepieces Cloud. Deliverability and validated phones matter more than the unit price — emailing a NO_MX domain just bounces.
Compliance basics (not legal advice)
- Public business contacts only, with the source kept.
- GDPR: a named person's work email is personal data — document a lawful basis and honour objections.
- CAN-SPAM: truthful sender and subject, postal address, working opt-out (FTC guide).
- Check do-not-call registries before phoning.
- No spam: a few relevant messages, and stop when asked.
Related guides
- n8n: Sheet websites → contacts
- Clay: emails + phones from a website column
- Find emails from a list of websites
- Enrich a lead list with phone + deliverability
- Google Maps leads to contacts
Optional: Activepieces Templates category
Community Templates on community.activepieces.com can accept an exported flow (share link or JSON) under the Templates category later — typically a short 50–250 character description and a real multi-step use case. You do not need a community post to follow this guide. We have not submitted anything for this flow.
What we actually ran
| Claim | Status |
|---|---|
| Apify Activepieces docs + piece action/trigger labels | READ from docs.apify.com and activepieces.com/pieces/apify |
| Flow built / imported in Activepieces Cloud | DID NOT RUN |
| Live Apify run for this guide | DID NOT RUN — $0 spent; use your own token |
| Google Sheets live write | DID NOT RUN — connect your sheet and test one batch |