Maintaining clean, deliverable mailing addresses in your CRM is critical for direct mail campaigns, billing, and customer communications. This guide walks through a complete n8n automation that verifies new contact mailing addresses using Lob’s address verification API and updates HighLevel with the result — automatically tagging contacts and notifying your team.
Why automated mailing address verification matters
Manual address entry invites typos, incomplete data, and undeliverable addresses. An automated workflow helps you:
- Reduce returned mail and wasted postage
- Improve campaign deliverability
- Ensure data quality in your CRM
- Trigger follow-up automations when addresses are suspect
Tools used in this workflow
- n8n — open-source automation tool to orchestrate the flow
- Lob — address verification API (US verifications endpoint)
- HighLevel — CRM to update contact records and tags
- Slack — notifications to alert your team
- Your CRM — sends a webhook into n8n when a new contact is created
Overview of the workflow
The workflow pictured (and included as an n8n template) performs these steps:
- Receive a webhook from your CRM with contact and address fields
- Map the incoming address fields into a consistent payload
- Post the address to Lob’s
/v1/us_verificationsendpoint - Use a Switch node to check Lob’s
deliverabilityresult - Update the contact in HighLevel with a tag for deliverable or not deliverable
- Send a Slack notification so your team is informed
Step-by-step setup
1) Receive a webhook from your CRM
Create an n8n Webhook node and configure your CRM to POST new contact data (address, city, state, zip, email, phone) to that endpoint. The webhook should include the contact identifier so HighLevel updates can find the correct record.
2) Map address fields
Use a Set node in n8n to normalize incoming fields. Example mapping used in the template:
address: {{ $json.address }}
address2: (optional)
city: {{ $json.city }}
state: {{ $json.state }}
zip: {{ $json.zip_code }}
3) Call Lob Address Verification API
Use an HTTP Request node configured to POST to:
https://api.lob.com/v1/us_verifications
Body parameters (form encoded or JSON depending on the Lob node):
primary_line={{ $json.address }}
secondary_line={{ $json.address2 }}
city={{ $json.city }}
state={{ $json.state }}
zip_code={{ $json.zip }}
Authenticate with your Lob API key (Basic Auth or Authorization header). Lob returns a JSON response that includes a deliverability field (for example: deliverable, undeliverable, risky).
4) Evaluate deliverability
Add a Switch node that checks the Lob response at $json.deliverability. In the example flow, the switch has two outputs:
- deliverable — proceed to tag the contact as “Mailing Address Deliverable” in HighLevel
- NOT deliverable — tag the contact as “Mailing Address NOT Deliverable” and trigger a verification workflow for your operations team
5) Update HighLevel
Use the HighLevel node to update the contact record. The template updates by email or phone (you can also pass the contact_id depending on your CRM mapping). Example additionalFields use:
additionalFields: {
tags: "Mailing Address Deliverable"
}
For undeliverable addresses tag accordingly so you can start an automation for manual verification or reach out to the contact directly.
6) Notify your team
After the HighLevel update, a Slack node posts a concise message to a channel so your team can review or take action. Example message:
Mailing address verification for {{ $json.email }}: {{ $json.deliverability }}
Error handling and retries
Address verification requests may fail due to network issues or API rate limits. Best practices:
- Add error workflows in n8n that catch HTTP failures and retry (use the Retry or Delay nodes)
- Log failed verifications to a spreadsheet or database for manual follow-up
- Rate-limit Lob requests from high-traffic sources — batch or queue if needed
Security and credentials
Secure your Lob and HighLevel API keys in n8n’s credentials manager. Never embed API keys in plaintext nodes. Use environment variables or n8n credentials to keep keys out of flow JSON exports.
Testing with sample data
n8n supports pin data on the Webhook node so you can simulate an incoming contact. In the provided template the pin data uses:
{
"city": "Washington",
"email": "mr.president@gmail.com",
"phone": "877-555-1212",
"state": "DC",
"address": "1600 Pennsylvania Avenue NW",
"zip_code": "20500",
"contact_id": "5551212"
}
Use this to quickly test the Lob call and the switch logic without needing your CRM to send real webhooks.
Best practices
- Normalize and trim address inputs before verification
- Store the raw Lob response in a custom field for auditing
- Tag contacts with a timestamped verification tag (e.g., “address_verified_2025-10-24”) to know when addresses were last checked
- Build a small manual verification queue for addresses marked “NOT deliverable” so your team can contact the customer for corrections
Common pitfalls
- Mapping mismatches — confirm your CRM field names match the Set node mapping
- Missing authentication — Lob requires an active API key and quotas
- Partial addresses — Lob may return “risky” when the address looks incomplete
Wrap-up
Automating mailing address verification with n8n and Lob saves time and money while improving the accuracy of your CRM data. This template accepts a webhook, maps fields, calls Lob’s US verification API, branches on deliverability, updates HighLevel, and notifies Slack — a complete address verification pipeline ready for production.
Ready to get started? Import the n8n workflow template, add your Lob and HighLevel credentials, pin test data to the webhook node, and run a few tests. If you’d like, download the ready-made template or watch the quick walkthrough video linked in the template notes.
Call to action: Import the template into n8n and verify your first 10 addresses today. Need help implementing this in your stack? Contact us or leave a comment and we’ll help tailor the flow to your CRM.
