Website Company Address Extractor
Pricing
Pay per event
Website Company Address Extractor
🏢 Extract structured HQ, registered, mailing, billing, and office addresses from public company websites. Every record includes its source URL, matched evidence, extraction method, and confidence score.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Extract headquarters, registered, mailing, billing, and office addresses from public company websites.
Provide company domains or URLs and receive structured postal records with the exact source page, matched evidence, extraction method, and confidence score.
The actor follows a small, focused set of public contact, about, location, legal, and imprint pages. It does not require a paid enrichment API or login.
What does Website Company Address Extractor do?
Website Company Address Extractor turns a list of company websites into address records ready for review or enrichment.
It can:
- 🏢 find headquarters and branch offices
- ⚖️ identify registered or legal addresses
- ✉️ classify mailing and billing addresses when the page labels them
- 🧩 split addresses into street, city, region, postal code, and country where possible
- 🔗 preserve the public source URL and matched page text
- 📊 attach a transparent confidence score and extraction method
- 🔎 discover likely contact, office, location, legal, and imprint pages
- ♻️ deduplicate repeated footer and navigation addresses
Each output row represents one unique company postal address.
Who is it for?
RevOps and sales operations
Refresh missing company addresses in CRM account records without manually opening every domain. Use the source evidence to route low-confidence rows for review.
KYB and vendor analysts
Check whether a supplier publishes a registered office, corporate headquarters, or regional location. Keep the source URL alongside the address for an auditable research trail.
Agencies and lead-generation teams
Enrich prospect-domain lists with public location information before segmentation, territory assignment, or outreach planning.
Data engineers
Schedule repeat runs, export normalized JSON or CSV, and feed address records into a warehouse or matching pipeline.
Why use this company address extractor?
A search result or generic page scraper can return snippets, but enrichment workflows need provenance and structure. This actor combines focused crawling with several extraction methods:
- schema.org
PostalAddressJSON-LD - postal-address microdata
- semantic HTML
<address>blocks - visible postal text containing street and postal-code evidence
The output tells you which method produced each record. That makes automated filtering safer than treating every number-like string as an address.
Supported websites
The actor works with public company websites that publish postal addresses in server-rendered HTML. Common sources include:
- company contact pages
- global or regional office directories
- about and corporate pages
- legal, imprint, and impressum pages
- location or branch pages
- footer address blocks
- JSON-LD organization markup
Coverage depends on what each company publishes. A company that only shows a map image or a JavaScript-only widget may require a different workflow.
How the bounded crawl works
For each input website, the actor fetches the supplied URL first. It then discovers same-site links whose URL or label suggests contact, about, location, office, headquarters, legal, company, or imprint content.
The maxPagesPerWebsite limit prevents an accidental full-site crawl.
The default is only five pages.
No off-site links are followed.
If one page fails, the actor continues with the other pages and websites. If every supplied website produces zero addresses, the run fails instead of silently returning an empty successful dataset.
Input
The required input is startUrls.
Add full URLs or bare domains.
{"startUrls": ["https://www.hubspot.com/company/contact","mozilla.org"],"maxPagesPerWebsite": 5,"maxAddressesPerWebsite": 20,"requestTimeoutSecs": 20}
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | Company domains, homepages, or public contact/location URLs |
maxPagesPerWebsite | integer | 5 | Maximum focused pages fetched per company, from 1 to 10 |
maxAddressesPerWebsite | integer | 20 | Maximum unique addresses saved per company |
requestTimeoutSecs | integer | 20 | Per-page HTTP timeout, from 5 to 60 seconds |
proxyConfiguration | object | disabled | Optional Apify Proxy settings for sites that block your direct IP |
Use low crawl limits for a first run. Increase them only for companies with large office directories.
Output data
The default dataset contains one row per unique address.
| Field | Description |
|---|---|
companyName | Name inferred from public site metadata or heading |
domain | Normalized input website hostname |
addressType | headquarters, registered, mailing, billing, office, or unknown |
fullAddress | Complete normalized address string |
streetAddress | Street component when detected |
addressLocality | City or locality when detected |
addressRegion | State, province, or region when detected |
postalCode | ZIP or postal code when detected |
addressCountry | Country name when detected |
sourceUrl | Exact public page containing the evidence |
evidenceText | Matched publisher text, capped at 500 characters |
confidence | Extraction confidence from 0.50 to 0.99 |
extractionMethod | json-ld, microdata, address-element, or visible-text |
scrapedAt | UTC extraction timestamp |
Optional components are omitted when a publisher exposes only an unstructured postal block.
fullAddress, sourceUrl, and evidenceText remain available for review.
Example output
{"companyName": "HubSpot","domain": "hubspot.com","addressType": "headquarters","fullAddress": "2 Canal Park, Cambridge, MA 02141, United States","streetAddress": "2 Canal Park","addressLocality": "Cambridge","addressRegion": "MA","postalCode": "02141","addressCountry": "United States","sourceUrl": "https://www.hubspot.com/company/contact","evidenceText": "Global Headquarters 2 Canal Park Cambridge, MA 02141 United States","confidence": 0.82,"extractionMethod": "visible-text","scrapedAt": "2026-07-17T16:00:00.000Z"}
Actual records depend on the current public page.
Address types and classification
Classification uses nearby publisher labels.
For example, “Global Headquarters” maps to headquarters, while “Registered office” maps to registered.
The actor does not invent a type when the page provides no context.
Such records use unknown.
You can filter those rows for manual review or combine them with your own business rules.
Confidence scores
Confidence reflects extraction evidence, not legal verification. Structured JSON-LD and microdata begin with the strongest score. Semantic address elements score above generic visible text. Complete street, postal code, and country components increase confidence.
For sensitive KYB decisions, verify records against an official registry or primary legal document.
How much does it cost to extract company addresses?
The actor uses pay-per-event pricing:
$0.005once per run- company address event priced by your Apify tier
- BRONZE reference price:
$0.00017208per unique address - higher tiers receive the published volume discount
You do not pay per fetched page. A duplicate address repeated in a footer is charged only once per website after normalization. Always check the live pricing panel for the tier that applies to your account.
Step-by-step: enrich company domains
- Open the actor input page.
- Paste company domains or public URLs into Company domains or URLs.
- Keep the five-page default for the first run.
- Click Start.
- Review the default dataset.
- Filter by confidence or address type.
- Export JSON, CSV, Excel, XML, or RSS.
- Save the task and schedule it for recurring refreshes if needed.
Tips for better results
- 🎯 Supply a known contact or location URL when you have one.
- 📉 Keep page limits low for large domain batches.
- 🌍 Preserve the source URL when merging records across regions.
- 🧪 Review
unknownaddress types before using them in legal workflows. - 🔁 Schedule refreshes because office pages change over time.
- 🛡️ Enable a proxy only when a target blocks your direct connection.
- 📋 Use confidence and evidence text to build a human-review queue.
Proxies and blocked websites
Most ordinary public company pages work without a proxy. Leaving proxy use disabled is cheaper and faster.
When a site consistently returns an access block from your current network, enable Apify Proxy in the input. Proxy access does not guarantee extraction from a JavaScript-only app or CAPTCHA page. The actor does not bypass logins or private access controls.
Integrations
CRM enrichment
Export CSV and match domain to company-account records in HubSpot, Salesforce, Pipedrive, or another CRM.
Store sourceUrl, confidence, and scrapedAt with the enriched value.
Data warehouses
Send completed datasets to BigQuery, Snowflake, PostgreSQL, or a webhook-driven ETL process. Use domain plus normalized address as a deduplication key.
Make and Zapier
Trigger a run when a new company domain enters a lead table. Route strong matches directly to enrichment and weak matches to a review queue.
Scheduled vendor monitoring
Create an Apify task and schedule weekly or monthly refreshes. Compare current addresses with the previous dataset to detect location changes.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/website-company-address-extractor').call({startUrls: ['https://www.hubspot.com/company/contact'],maxPagesPerWebsite: 5,maxAddressesPerWebsite: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/website-company-address-extractor').call(run_input={'startUrls': ['https://www.hubspot.com/company/contact'],'maxPagesPerWebsite': 5,'maxAddressesPerWebsite': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~website-company-address-extractor/runs?token=APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls":["https://www.hubspot.com/company/contact"],"maxPagesPerWebsite":5}'
Use the returned run ID to poll status and retrieve the default dataset.
Use with Apify MCP and AI agents
Connect Apify MCP to let Claude or another agent run this extractor as a tool.
MCP endpoint:
https://mcp.apify.com?tools=automation-lab/website-company-address-extractor
Example Claude Code configuration:
claude mcp add --transport http apify \'https://mcp.apify.com?tools=automation-lab/website-company-address-extractor'
Claude Desktop setup
Add this server to your Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/website-company-address-extractor"}}}
Cursor setup
Add the same Apify MCP URL in Cursor Settings → Tools & MCP → New MCP Server.
Name it apify-company-addresses and choose HTTP transport.
VS Code setup
In VS Code with MCP support, add an HTTP server whose URL is the actor-specific Apify MCP endpoint above. Enable it for your workspace before asking the agent to run extraction.
Example prompts for MCP
Try these specific prompts:
- “Extract public office addresses from these five company domains.”
- “Find the registered or headquarters address and include source evidence.”
- “Create a CSV-ready address table for this vendor list.”
Scheduling and repeat workflows
Company websites change when teams move offices, reorganize regions, or update legal entities. Create an Apify task with a stable domain list and schedule it monthly.
Store prior datasets externally if you need change detection. The actor reports the current public evidence rather than maintaining historical state.
Error handling
A single inaccessible page does not stop the whole batch. The actor logs the page URL and failure, then continues.
The OUTPUT key-value-store record summarizes:
- websites requested
- websites that yielded addresses
- addresses saved
- per-domain errors
A run with no addresses across all inputs fails deliberately. This protects scheduled pipelines from treating total extraction failure as a valid empty refresh.
Limitations
- It only extracts addresses published on public HTML pages.
- It does not query government registries or paid enrichment APIs.
- It does not verify whether an address is current or legally authoritative.
- JavaScript-only maps and image-only addresses may not be visible.
- Country-specific parsing is best for common US, Canadian, and UK forms.
- Company names come from site metadata and can reflect a brand rather than a legal entity.
- Optional address components may be absent when the source is unstructured.
- Proxy configuration cannot solve every CAPTCHA or login wall.
Privacy and legality
Company postal addresses can still be personal data when a business uses a home address. Use the output for a lawful purpose and apply appropriate retention and access controls.
Only process websites you are authorized to access. Respect applicable terms, robots guidance, privacy law, database rights, and marketing rules. Do not use the actor to bypass authentication or technical access restrictions.
Troubleshooting
Why did a domain return no address?
The company may not publish one, the address may be rendered only in JavaScript or an image, or the relevant page may not match the discovery hints. Try supplying the exact public contact, location, or imprint URL and increase the page cap only when justified.
Why is the address type unknown?
The page exposed a postal address without nearby labels such as “Headquarters” or “Registered office.”
Review evidenceText and apply your own classification if needed.
Why are some components missing?
The source may combine locality and region in free text.
Use fullAddress and evidenceText as the source-preserving fields rather than assuming every component can be split reliably.
Should I enable a proxy?
Only after observing repeatable access blocks without one. A proxy adds cost and is unnecessary for most public company pages.
FAQ
Can I submit bare domains?
Yes. Values such as example.com are normalized to HTTPS.
Does the actor crawl the whole website?
No. It fetches the supplied URL and a bounded number of likely company/contact/location/legal pages on the same site.
Does one office equal one charged result?
Yes. The actor charges once for each unique address pushed to the dataset, plus the one-time run event.
Can I extract many domains in one run?
Yes, up to 100 websites per run. Start with a small batch to verify coverage and runtime for your target set.
Is confidence a legal verification score?
No. It measures extraction evidence quality, not registry validity or current occupancy.
Can I use the results for direct mail?
That depends on your jurisdiction, purpose, and the nature of the address. Obtain legal advice for your specific campaign and follow opt-out and privacy obligations.
Related scrapers
Pair this actor with other Automation Lab tools when you need broader lead enrichment:
- Google Maps Lead Finder for discovering local businesses before website enrichment
- Website Contact Scraper for public email and phone contact fields
- Domain WHOIS Scraper for registration metadata when publicly available
Choose the address extractor when your starting point is an existing list of company domains and postal location is the required output.
Get started
Paste one public company contact page into the input and run the five-page default. Review the address, source URL, evidence, and confidence in the dataset. Then scale to your CRM, KYB, vendor, or agency domain list and schedule recurring refreshes.