Skip to content

How to Extract Business Phone Numbers from Websites

Extract published website phone numbers, review country codes and source pages, and prepare a clean business phone CSV with Apify or your agent.

Dievio Team · Growth Systems · November 6, 2026 · 7 min read

Browser window beside a telephone handset

To extract business phone numbers from websites, paste your domains or contact-page URLs into the Website Phone Number Finder on Apify. It checks website HTML for published numbers and telephone links, then saves the results with their source pages. Export the Dataset as CSV and keep the business context with each number.

You can run a small test through the input form before processing a larger website list. Set the expected country for local numbers, check the first results manually, then increase your volume. An AI agent connected through Apify MCP can also coordinate the crawl and prepare your CSV.

Step 1. Prepare websites and group local numbers by country

Keep an original sheet with a business name, source row ID and website. Copy distinct website inputs into a separate crawl list, retaining a mapping to the original rows. The Actor accepts bare domains and full URLs, including known contact or location pages.

When a branch has its own page, preserve that path. A shared company homepage can publish a central switchboard, while a location page may publish a local number. Keep the source page so you can distinguish those cases.

For UK businesses, set defaultPhoneRegion to GB; use US for a US batch or the appropriate two-letter code for another country. A number already written with a + country code carries its own international context.

If you omit the region, the Actor uses an available country suffix from the website, with US as the fallback. A .com domain does not identify a company’s country. Split mixed-country lists where necessary and review ambiguous local numbers before assigning a calling code.

Step 2. Open the phone Actor and run a small test

Open the Website Phone Number Finder on Apify, click Try for free and sign in if prompted. Use the editable Input form in Apify Console.

  1. Paste five real sites into Domains or website URLs.
  2. Choose allWebsites for the result mode while testing.
  3. Set Maximum saved phone results to 5 so the test can retain a record for every input.
  4. Use 3 under Pages to check per website.
  5. Enter the relevant code in Phone country.
  6. Keep phone extraction enabled. Leave optional email and social extraction off if you only need numbers.
  7. Review pricing, set your run budget and click Start.

Check the current input reference for all controls. The screenshot shows the read-only field reference; the actual list is entered in Apify Console.

Website Phone Number Finder fields for websites, saved phone records, result modes and crawl page limits
Read-only field reference for the phone Actor. Set the phone country in the additional Console controls.

JSON template for two UK business websites

Replace both placeholders with real website URLs and change the region when your batch belongs to another country.

{
  "domains": [
    "https://YOUR_FIRST_BUSINESS_WEBSITE",
    "https://YOUR_SECOND_BUSINESS_WEBSITE"
  ],
  "maxResults": 2,
  "resultMode": "allWebsites",
  "maxPagesPerWebsite": 3,
  "defaultPhoneRegion": "GB",
  "extractPhones": true,
  "extractEmails": false,
  "extractSocials": false,
  "includePersonalData": false,
  "sameDomainOnly": true
}

The Actor starts with the supplied page or homepage and follows likely internal contact pages. A direct contact-page URL is useful when you already know where the number is published. Keep the same-domain setting on for a focused company-site crawl.

Choose phone matches or a website coverage report

The default phonesOnly mode saves website records containing at least one phone number. maxResults limits saved website records, so a single saved row can contain several numbers in its phones array.

Phone Actor result modes
ModeSaved output
phonesOnlyWebsites with phone matches. Useful for a phone-first list.
contactsOnlyWebsites with an enabled contact type, including optional emails or social links.
allWebsitesWebsite outcomes including those without a found number.

Use allWebsites for your pilot or a coverage report. Saved records in this mode can be charged even when no phone was found. Keep the original input list because an output or spending cap can still leave some inputs without a saved result.

Step 3. Read the phone results and verify the source

Open the run’s Dataset after completion. Start with the phones array, then inspect phoneDetails. Each detail can include a normalized phone value and its sourceUrl.

Fields for a useful website phone export
FieldHow to use it
input, url, domainMatch the result to your website list.
phones, phoneDetailsKeep each number and the page supporting it.
status, pagesFetchedUnderstand whether the website was reached and how much was checked.
fetchedUrls, httpStatusCodes, errorsInvestigate missing numbers or fetch problems.
contactSignalsReview the contact counts for the website.

Open the source page for a sample of numbers. Check whether the number belongs to the intended business, a particular branch, a booking service or another organization mentioned on the page. Keep a scope label such as company switchboard or branch when the page establishes it.

The personal data switch controls optional person-like emails and personal LinkedIn links. It does not determine whether a phone number is a mobile, a landline or a direct line to a particular employee. Use the published page context for that assessment.

Dievio

Your next customer starts here.

Find decision-makers by role, company and location. Build your next prospect list in Dievio.

Find my leads

Free audience preview · No credit card

Find leadsExample
FounderSoftwareUnited States
AM
Alex MorganFounder & CEO · Northstaralex@northstar.example
JC
Jamie ChenCo-founder · Formlyjamie@formly.example
Work emailsCompany detailsCSV export

Step 4. Export phone numbers without damaging their format

  1. Download CSV from the Dataset and keep the original export.
  2. Download JSON too if nested phoneDetails are easier to review there.
  3. Create a contacts sheet with one row per website and phone number.
  4. Keep the original business row ID, normalized number and source URL.
  5. Import phone and extension columns as text in your spreadsheet or CRM.
  6. Deduplicate repeated website-and-number pairs while preserving different business relationships.

Text formatting protects the leading + and helps avoid spreadsheet conversion. If a source page shows an extension that the Dataset does not retain, record it separately after checking the page. Do not invent a missing extension from the normalized value.

For example, a fictional US page might show (202) 555-0140 ext. 7. After confirming the region, your reviewed number could be +12025550140, with 7 in a separate extension field. This example illustrates your cleanup table rather than a promise that every raw formatting detail is exported automatically.

Understand what this phone crawl can read

The phone Actor uses a browserless HTTP crawl. It extracts phone text and tel: links from the HTML it receives. It can miss numbers added only after JavaScript runs, hidden behind interactions, or displayed as images.

When a known number is missing, first check whether its page appears in fetchedUrls. Submit the exact page or increase the page limit for that website if it was never reached. The supported page range is 1–25.

If the site depends on JavaScript, the combined Website Email Scraper also supports phone extraction and a browser fallback. Choose contactsOnly or allWebsites there when phone-only matches must be retained, then filter the output for phone presence.

A page that returned no number during a short HTML scan remains a limited observation. Keep fetched-no-match results separate from fetch failures and inputs that were never processed. Read the returned errors and source pages before deciding on a retry.

Scale a larger business phone list

The saved-result ceiling goes up to 1,000,000, and the Actor supports configurable concurrency. Start with the default parallelism of 8, then try a larger value on a representative sample. Higher concurrency can increase throughput, but some sites may respond slowly or throttle requests.

Batch by country when local-number interpretation depends on it. Save the input file, region, crawl depth, run ID and Dataset ID for each batch. Keep website-level outcomes separate from the expanded phone contacts so multiple numbers do not inflate your business count.

Open RUN_SUMMARY in the key-value store. Compare inputWebsites, processed, saved, filteredOut and failed. Check chargeLimitReached and exhaustionReason before interpreting missing rows. Retry failed sites with their existing keys and merge the updates back into the original list.

Run website phone extraction with your agent through MCP

Connect your MCP-compatible agent to https://mcp.apify.com, then authorize your Apify account using the Apify MCP guide. Give the agent the phone Actor’s name and the correct region for your input.

Use x_guru/website-phone-number-finder.
Website list: [MY_FILE_OR_URLS]
Phone region: [TWO_LETTER_CODE]
Approved run budget in USD: [AMOUNT]

Inspect the current schema. Start with
five real websites from one country group.
Use allWebsites, maxResults=5,
maxPagesPerWebsite=3, extractPhones=true,
extractEmails=false, extractSocials=false
and sameDomainOnly=true.
Apply the approved cap through
callOptions.maxTotalChargeUsd.

Read the complete Dataset and RUN_SUMMARY.
Keep source row IDs and phoneDetails,
including each available sourceUrl.
Save a website status table and a phone
CSV with phone columns treated as text.
Keep company and branch scope explicit.
Report missing, failed and unprocessed
inputs, run ID and Dataset ID.
Wait before expanding the batch.

The agent can start the run with call-actor, wait with get-actor-run and read each Dataset page through get-dataset-items. Preserve the country setting and source evidence when the agent prepares your files.

For a new list of local businesses, begin with the Google Maps export guide. For mixed email and phone research, follow the website email workflow. For recurring runs from your own application, use the Apify API and Dataset guide.

Keep reading

Build your first list.

100 free credits. No credit card required.

Start free