Contact Address Validation Smarty
Verify every contact address is real and deliverable — one click sends it to Smarty's address verification APIs, confirms US addresses down to the delivery point (including apartment and suite numbers), and writes the standardized address and geocoded coordinates back to the record. US and International coverage on a provider-agnostic framework.
Product Overview
Contact Validation Smarty brings Smarty (formerly SmartyStreets) to the Odoo Contact form. It checks whether an entered address refers to a real, deliverable place, standardizes it, and geocodes it — directly from the Contact form, without leaving Odoo. US addresses use Smarty's US Street Address API; every other country is routed automatically to the International Street Address API.
The product is built on a provider-agnostic address validation framework. The button, the review dialog, the stored verdict, and the search filters are shared framework components; Smarty plugs in as a provider adapter. If your requirements ever change, you can switch to the Google or PostGrid adapter from Settings, and your users' workflow stays exactly the same.
Clicking Verify Address sends the contact's address to Smarty via a secure server-side request — the secret key pair never reaches the browser. A dialog opens with Smarty's verdict kept verbatim and translated into a clear severity color. US addresses are validated to the delivery point with USPS DPV — including secondary-unit precision that distinguishes "confirmed" from "confirmed, but the apartment number is missing or wrong". International addresses return Smarty's verification status: Verified, Partial, Ambiguous, or unverified.
Smarty's terms permit permanent storage of standardized addresses, so the standardized result is kept on the contact for reference. Delivery details — the residential/commercial indicator, vacancy flag, and county — are shown in the dialog, and the standardized address is broken down into its parsed components for easy comparison.
Who It's For
The Problem It Solves
Odoo's address fields are free-text. Typos, incomplete streets, and non-existent postcodes are saved without warning and propagate to every downstream process that reads the contact's address — from shipping labels to invoice footers.
An address can look perfectly valid and still be undeliverable because the unit number is missing or wrong. Smarty's DPV-level statuses make that difference visible — "confirmed" vs. "confirmed, unit missing" — before anything ships.
Most address validation connectors hardwire one provider into fields, views, and code. Changing vendors later means migrating data and retraining users. Here the provider is a plug-in choice — the workflow, fields, and filters are shared.
Without a stored verification status, there is no way to filter or report on which contacts have verified addresses and which need attention — until something breaks downstream and the damage is already done.
What's Inside
Three modules — a shared validation framework, the Smarty provider adapter, and the Contacts application module — bringing verified, standardized, geocoded addresses to every Odoo Contact record.
Base Address Validation
The provider-agnostic framework. It defines the provider registry, the reusable verification mixin (status fields, automatic reset, verify and apply actions), and the generic Verify Address widget and review dialog shared by every provider. Provider statuses are stored verbatim, while a shared severity (success / warning / danger) drives badges, filters, and the Apply guard.
Why It Exists
Centralising the workflow in one framework means the button, dialog, stored fields, and filters are identical no matter which provider is active — and switching providers is a Settings change, not a data migration.
Address Validation: Smarty
Registers Smarty as a provider. All API logic lives in a server-side service model — country-based routing between the US Street and International Street APIs, request building, response parsing, and friendly error handling. Smarty's verdict is stored verbatim: USPS DPV statuses for US addresses (confirmed, unit dropped, unit missing, not confirmed, no match) and the International verification statuses (Verified, Partial, Ambiguous, unverified).
Delivery-Point Precision
Smarty's DPV statuses go beyond street-level validation: they distinguish a fully confirmed delivery point from one where the apartment or suite number is missing or unrecognized — the difference between a delivered package and a returned one.
Secret Key Pair, Server-Side Only
Authentication uses a Smarty secret key pair (Auth ID / Auth Token) configured in Settings, with optional license values for accounts holding multiple subscriptions. Credentials are used server-side only and never sent to the browser.
Contacts Address Validation
Applies the framework to Contacts. The Contact form gains the Verify Address button and the severity-colored status badge; the Contacts list gains verification filters. Every verification is logged in the chatter — including old → new coordinates when they change — and editing any address field resets the status automatically.
How It Works
The entire flow — from button click to stored verdict — stays inside Odoo. The secret key pair never leaves the server.
- Open a Contact and enter an address. The Verify Address button appears below the address block on the Contact form as soon as the modules are installed and Smarty is selected as the provider in Settings.
- Click Verify Address. Any pending form edits are saved automatically before the request is sent, ensuring the stored verdict always matches the address that was actually verified.
- Odoo sends a server-side API request. US addresses are routed to Smarty's US Street Address API; every other country goes to the International Street Address API — automatically, based on the contact's country.
- Review the verification dialog. The dialog opens with a severity banner explaining Smarty's verbatim status in plain language, a side-by-side comparison of entered vs. standardized address, the USPS DPV confirmation for US addresses, delivery details — residential/commercial, vacancy, county — and the parsed address components.
- Choose an action. Apply Standardized Address — writes the standardized address and geocoordinates to the contact and stores the verdict. Keep Current Address — stores only the verdict without changing the address. Discard — closes the dialog without writing anything.
- The status badge reflects the stored verdict. Smarty's own status is shown next to the button with its severity color, and the verification is logged in the chatter. If any address field is later edited, the status resets automatically — stale verdicts never linger after an address change.
Key Features
Delivery-point address verification for the US and street-level verification worldwide, with a stored, searchable audit trail — on a framework that lets you change providers without changing the workflow.
Verification & Dialog
- Verify Address button — One-click verification from the Contact form; pending edits are saved automatically before the request.
- Verbatim Smarty statuses — USPS DPV statuses for US addresses and the International verification statuses are stored exactly as Smarty returns them, with a severity color and plain-language explanation on top.
- Side-by-side address comparison — Entered address vs. Smarty's standardized address, with the parsed components listed so the user sees exactly what would change.
- Delivery details — Residential/commercial indicator, vacancy flag, and county shown in the dialog for supported addresses.
- Three dialog actions — Apply Standardized Address, Keep Current Address (verdict only), or Discard (no write).
Coverage & Precision
- US + International — Automatic routing by country between Smarty's US Street and International Street APIs; one provider for the whole contact database.
- Secondary-unit precision — DPV statuses distinguish confirmed delivery points from addresses with a missing or unrecognized apartment/suite number — visible before anything ships.
- Standardized address storage — Smarty's terms permit permanent storage, so the standardized address is kept on the record for reference and label printing.
- Geocoding included — Latitude and longitude with their precision are written to the contact, with old coordinates logged in the chatter.
Framework & Data Quality
- Provider-agnostic framework — Switch to Google or PostGrid from Settings later; fields, filters, and the user workflow stay identical.
- Automatic status reset — Editing street, street2, city, zip, state, or country resets the status — stale verdicts never persist.
- Search filters by outcome — Built-in Contacts filters for verified, needs-review, failed, and not-verified addresses — no custom domain required.
- Secure credentials — The Smarty secret key pair is stored in Odoo system parameters and used server-side only; it is never sent to the browser.
Use Cases & Benefits
Deliverable Down to the Unit
US addresses are confirmed to the delivery point, including the apartment or suite — the difference between a delivered package and a returned one is visible before dispatch.
One Provider, Worldwide
US Street and International Street APIs behind a single button — the routing happens automatically by country, so global contact databases are covered without per-country setup.
Standardized Addresses You Can Keep
Smarty permits permanent storage of its standardized addresses — they stay on the record, ready for mailing labels, exports, and downstream systems.
Accurate Geocoordinates in One Step
Latitude and longitude with precision come back with the verification — no separate geocoding call needed. Map views and territory assignments work immediately on verified contacts.
No Vendor Lock-In
The verification workflow, stored fields, and filters belong to the framework, not to Smarty. If pricing, coverage, or compliance needs change, switch the provider in Settings — users won't notice a difference.
Audit-Ready Verification Trail
A stored, searchable status on every contact plus a chatter entry for every verification — including coordinate changes — makes data quality auditable without exports or custom reports.
What's in the Bundle
Three modules — the shared framework, the Smarty provider adapter, and the Contacts application module.
Foundation
-
base_address_validation— Provider registry, verification mixin, generic Verify Address widget and review dialog, provider selection in Settings
Provider Adapter
-
address_validation_smarty— Smarty US Street and International Street API integration with automatic country routing, USPS DPV delivery-point confirmation, delivery details, and parsed address components
Application · Contacts
-
contacts_address_validation— Verify Address button on the Contact form, severity badge, search filters by verification outcome, automatic status reset, chatter audit trail