Address Validation & Normalizer (Bulk, US/CA/UK) avatar

Address Validation & Normalizer (Bulk, US/CA/UK)

Pricing

from $2.00 / 1,000 validated addresses

Go to Apify Store
Address Validation & Normalizer (Bulk, US/CA/UK)

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

Simon Fletcher

Maintained by Community

Actor 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 status and issues, 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

  1. Click Try for free.
  2. In the Input tab, paste your addresses into the addresses array — plain strings, objects with fields, or a mix of both.
  3. (Optional) Set a Default country if some rows don't state one, and a Max addresses cap as a cost guard.
  4. Click Start. Results stream into the Output tab.
  5. Export the dataset as JSON, CSV, Excel or HTML, or pull it via the API.

Input

FieldTypeRequiredDescription
addressesarrayAddress 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.
defaultCountrystringISO code (US, CA, GB) applied to rows whose country can't be inferred. Default: Auto.
maxAddressesintegerHard 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

FieldDescription
inputOriginal address as submitted.
countryResolved ISO country code (US, CA, GB).
statusvalid, corrected, needs_review, unparseable, or empty.
normalizedStandardized single-line address.
componentsParsed parts: house number, street, unit, city, region, postcode, country code.
issuesStructural problems found ({code, message}).
correctionsNormalization changes applied.
confidenceHeuristic 0–1 confidence in the parse.
chargedWhether 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/zip columns, pass them as object fields — parsing is more reliable than from a single freeform string.
  • Set defaultCountry for single-country lists so ambiguous rows resolve correctly.
  • Filter by status downstream: keep valid/corrected, route needs_review to a human, drop empty/unparseable.
  • Cap costs with maxAddresses when 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.