Address Validation & Normalizer (Bulk, US/CA/UK)
Pricing
from $2.00 / 1,000 validated addresses
Address Validation & Normalizer (Bulk, US/CA/UK)
Bulk-validate, parse and standardize postal addresses to clean JSON. No API keys. Pay per address.
Pricing
from $2.00 / 1,000 validated addresses
Rating
0.0
(0)
Developer
Simon Fletcher
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Clean, parse and standardize messy postal addresses into structured JSON — in bulk, with no API keys and no external services. Feed it a list of freeform addresses (or partial address fields) and get back a canonical single-line address, split components, a validation status, and a list of exactly what was fixed. Built for data teams, CRMs, and AI agents that need consistent address data before dedupe, geocoding, mail-merge, or analytics.
Scope — read this first. This Actor performs format & structural validation and normalization: it parses components, standardizes casing/abbreviations/postal-code formatting (USPS-style), and checks that the required parts are present and correctly shaped for the country. It does not verify deliverability or existence (that a specific house/unit is real and receives mail) — that requires a live postal database and is intentionally out of scope. Every record is labelled honestly via its
statusandissues, so you always know what was and wasn't checked.
What does Address Validation & Normalizer do?
It takes an array of addresses — each either a freeform string ("1600 amphitheatre pkwy, mountain view ca 94043") or an object with fields ({"street": "...", "city": "...", "zip": "..."}) — and for each one returns:
- a normalized single-line address with standardized casing, street-suffix, directional and unit abbreviations, and a correctly formatted postal code;
- parsed components (house number, street, unit, city, region/state, postcode, country code);
- a status (
valid,corrected,needs_review,unparseable,empty); - the corrections applied and any structural issues found;
- a confidence score.
Because it runs on the Apify platform, you get API access, scheduling, integrations (Make, Zapier, n8n), and an MCP endpoint so AI agents can call it directly — with monitoring and run history for free.
Why use it?
- Deduplicate and match records. Standardized addresses make fuzzy CRM/marketing lists collapse cleanly.
- Pre-clean before geocoding or mailing. Fix casing, abbreviations and postal-code formatting before you pay a geocoder or mailing house per lookup.
- Validate form submissions in bulk. Catch missing ZIP codes, malformed postcodes and unknown state codes across a whole file.
- Agent-ready output. Concise, flat JSON — no HTML, no nested junk — ideal for LLM tool use via Apify MCP.
- No keys, no accounts, near-zero maintenance. Fully self-contained: it doesn't scrape any website, so it doesn't break when a site changes.
How to use Address Validation & Normalizer
- Click Try for free.
- In the Input tab, paste your addresses into the
addressesarray — plain strings, objects with fields, or a mix of both. - (Optional) Set a Default country if some rows don't state one, and a Max addresses cap as a cost guard.
- Click Start. Results stream into the Output tab.
- Export the dataset as JSON, CSV, Excel or HTML, or pull it via the API.
Input
| Field | Type | Required | Description |
|---|---|---|---|
addresses | array | ✅ | Address rows. Each item is a freeform string or an object with any of: address, house_number, street, unit, city, state/region, postcode/zip, country. Component fields override anything parsed from a freeform address. |
defaultCountry | string | — | ISO code (US, CA, GB) applied to rows whose country can't be inferred. Default: Auto. |
maxAddresses | integer | — | Hard cap on rows processed this run (0 = no cap). A cost guard alongside the run's max-charge limit. |
{"addresses": ["1600 amphitheatre pkwy, mountain view, ca 94043",{ "street": "1 infinite loop", "city": "cupertino", "state": "california", "zip": "95014" },"221B baker street, london, NW1 6XE, uk"],"defaultCountry": ""}
Output
Each input row produces one dataset record. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
{"input": "1600 amphitheatre pkwy, mountain view, ca 94043","country": "US","status": "corrected","normalized": "1600 Amphitheatre Pkwy, Mountain View, CA 94043","components": {"house_number": "1600","street": "Amphitheatre Pkwy","unit": null,"city": "Mountain View","region": "CA","postcode": "94043","country_code": "US"},"issues": [],"corrections": ["standardized city 'mountain view' -> 'Mountain View'"],"confidence": 0.95,"charged": true}
A row that's structurally incomplete is flagged rather than silently "fixed":
{"input": "742 evergreen terrace, springfield, or","status": "needs_review","normalized": "742 Evergreen Ter, Springfield, OR","issues": [{ "code": "missing_postcode", "message": "Postal/ZIP code is missing." }],"confidence": 0.71,"charged": true}
Data table
| Field | Description |
|---|---|
input | Original address as submitted. |
country | Resolved ISO country code (US, CA, GB). |
status | valid, corrected, needs_review, unparseable, or empty. |
normalized | Standardized single-line address. |
components | Parsed parts: house number, street, unit, city, region, postcode, country code. |
issues | Structural problems found ({code, message}). |
corrections | Normalization changes applied. |
confidence | Heuristic 0–1 confidence in the parse. |
charged | Whether the row was billed (empty/unparseable rows are not billed). |
How much does it cost to validate addresses?
Pricing is pay-per-address: you're charged one event per address that produces usable output. Empty and unparseable rows are never charged, and you can set a Max addresses cap and the platform's max-charge limit as hard cost guards. Validating 10,000 addresses costs about the price of a coffee — far less than per-lookup commercial APIs when you only need parsing, standardization and structural validation. See the Pricing tab for the current per-address rate.
Tips & advanced options
- Send structured fields when you have them. If your data already has
city/state/zipcolumns, pass them as object fields — parsing is more reliable than from a single freeform string. - Set
defaultCountryfor single-country lists so ambiguous rows resolve correctly. - Filter by
statusdownstream: keepvalid/corrected, routeneeds_reviewto a human, dropempty/unparseable. - Cap costs with
maxAddresseswhen testing.
FAQ, disclaimers & support
- Does it verify an address is real/deliverable? No — it validates format and structure and standardizes the address. Deliverability/existence checks need a live postal database (e.g. USPS / Royal Mail) and are out of scope. Use this to clean and structure data before such a check.
- Which countries are supported? Tailored rules for US, Canada and the UK, plus a generic best-effort fallback for other countries (casing/whitespace normalization and component splitting).
- Do I need an API key or account with a third party? No. The Actor is fully self-contained and makes no external calls.
- Data privacy. Only submit address data you're authorized to process. The Actor does not scrape or enrich from third-party sources; it only transforms the input you provide.
- Feedback, bugs, or a country you need? Open an issue on the Issues tab — custom rules and additional countries can be added.