Install
openclaw skills install website-phone-number-finder-apifyUse this skill when the user needs public business phone numbers, tel links, optional emails, social profiles, source URLs, and crawl diagnostics from website domains or URLs through the Website Phone Number Finder Apify actor.
openclaw skills install website-phone-number-finder-apifyThis skill helps an AI agent run the Apify Website Phone Number Finder actor for public website phone extraction from domains and URLs.
Default actor:
HE8ML7ZqmGI6OtyFUx_guru/website-phone-number-finderhttps://apify.com/x_guru/website-phone-number-finderhttps://console.apify.com/actors/HE8ML7ZqmGI6OtyFU/sourceUse this skill when a user asks to:
tel: links, visible phone numbers, source URLs, social profiles, optional emails, and crawl diagnosticsmaxTotalChargeUsdresultMode: "phonesOnly" by default for phone lead extraction.contactsOnly when social profiles or optional emails are useful even without phones.allWebsites only when the user needs diagnostics for every submitted website.maxPagesPerWebsite at 3 for fast runs; use 5-10 when phone numbers are likely on locations, booking, contact, legal, imprint, or team pages.extractPhones=true; disable extractEmails unless secondary email enrichment is requested.includePersonalData=false when personal LinkedIn profile URLs or person-like optional emails should be excluded.maxTotalChargeUsd when spend matters.scripts/website_phone_number_finder_actor.py or call the Apify API directly.RUN_SUMMARY for diagnostics when counts are lower than requested.domains for bare domains and full website URLs.urls and startUrls can be normalized into domains by the runner for agent convenience.maxResults is the maximum number of saved dataset rows.resultMode must be phonesOnly, contactsOnly, or allWebsites.maxPagesPerWebsite must be 1-25; default is 3.concurrency must be 1-500; default is 100.requestTimeoutSecs must be 2-30; default is 5.extractPhones, extractEmails, extractSocials, includePersonalData, and sameDomainOnly are booleans.searchStringsArray, placeIds, locationQuery, or review fields to this website-only actor.maxTotalChargeUsd as an Apify run option, not inside actor input. The included script exposes it as --budget-usd.Use the Apify API token from the environment:
export APIFY_TOKEN='apify_api_xxx'
Never hardcode or print the full token in user-facing output.
The bundled script uses only Python standard library.
Run a quick phone scrape:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/website_phone_number_finder_actor.py quick-domains \
--domains alchemist.dk disfrutarbarcelona.com \
--max-results 50 \
--budget-usd 1
Run with deeper phone discovery:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/website_phone_number_finder_actor.py quick-domains \
--domains alchemist.dk disfrutarbarcelona.com diverxo.com \
--max-results 100 \
--max-pages 5 \
--result-mode phonesOnly \
--budget-usd 1
Run custom JSON:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/website_phone_number_finder_actor.py run \
--input-file references/sample_input.json \
--budget-usd 1
{
"domains": ["alchemist.dk", "disfrutarbarcelona.com", "diverxo.com"],
"maxResults": 1000,
"resultMode": "phonesOnly",
"maxPagesPerWebsite": 3,
"concurrency": 100,
"requestTimeoutSecs": 5,
"extractPhones": true,
"extractEmails": false,
"extractSocials": true,
"includePersonalData": true,
"sameDomainOnly": true
}
{
"domains": ["example.com", "https://example.com/contact"],
"maxResults": 500,
"resultMode": "phonesOnly",
"extractPhones": true,
"extractEmails": true,
"extractSocials": true
}
{
"domains": ["example.com", "apify.com"],
"maxResults": 100,
"resultMode": "contactsOnly",
"maxPagesPerWebsite": 5
}
The runner returns JSON:
okactorIdfetchedAtinputUseditemCountrows[]Rows are actor dataset items. Important groups:
input, url, domain, statusphones, phoneDetails.phone, phoneDetails.sourceUrlemails, emailDetails.email, emailDetails.type, emailDetails.sourceUrl, emailDetails.domainMatchsocialLinks, facebooks, instagrams, linkedIns, twitters, youtubes, tiktokscontactSignals, pagesFetched, fetchedUrls, httpStatusCodes, errors, durationMsFor the full contract, read references/input-output-contract.md.
RUN_SUMMARY.phones is empty in contactsOnly or allWebsites, explain that the row was saved due to email/social/diagnostic data.maxTotalChargeUsd for any user concerned about spend.references/input-output-contract.mdreferences/sample_input.jsonreferences/troubleshooting.md