HighLevel + Lob: mail ready contacts, fewer returns
Your direct mail doesn’t fail because your offer is weak. It fails because the address is wrong, incomplete, or just plain undeliverable. And you usually find out after you’ve paid for printing, postage, and the awkward “why didn’t I get it?” follow-ups.
Marketing managers running postcards, agency owners sending client campaigns, and ops-minded business owners all run into the same mess. A solid HighLevel Lob integration fixes it by verifying addresses the moment a contact is created, so you stop mailing to bad data.
This workflow connects HighLevel to Lob address verification, then updates the contact based on deliverability. You’ll see exactly where the time savings come from, what you need to run it, and how to avoid the common setup traps.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: HighLevel + Lob: mail ready contacts, fewer returns
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Inbound CRM Webhook"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Address Fields", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Verify Mailing Address"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Deliverability", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/highLevel.svg' width='40' height='40' /></div><br/>Update CRM Deliverable"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/highLevel.svg' width='40' height='40' /></div><br/>Update CRM Not Deliverable"]
n3 --> n4
n3 --> n5
n1 --> n2
n0 --> n1
n2 --> n3
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3 decision
class n0,n2 api
classDef customIcon fill:none,stroke:none
class n0,n2,n4,n5 customIcon
The Challenge: Direct mail lists rot fast
Addresses in a CRM look “fine” right up until you try to use them. Someone types “St.” on one record and “Street” on another. A suite number gets dropped. A city is misspelled. Or the contact simply gave you an address that doesn’t receive mail. You can manually spot-check, but that turns into a weekly chore, and honestly it’s the kind of task people put off until a campaign is already scheduled. Then returned mail shows up, budgets get wasted, and you lose confidence in the list.
The friction compounds. Here’s where it breaks down.
- Teams end up “cleaning” addresses right before a send, which delays the campaign and adds last-minute stress.
- Bad records slip through because a quick glance can’t tell you if an address is actually deliverable.
- Returned mail creates hidden work: updating records, reprinting, resending, and explaining results to stakeholders.
- Without a consistent verification step, your list quality gets worse over time, even if your lead flow stays strong.
The Fix: Verify HighLevel addresses with Lob, automatically
This workflow runs address verification right when a new contact is created in HighLevel. HighLevel sends the new contact details to n8n via a webhook, n8n maps the address fields into Lob’s expected format, and then Lob checks whether the address is deliverable. Based on that response, the workflow routes the contact down the correct path and writes the result back into HighLevel. Deliverable contacts get updated as “good to mail.” Not deliverable contacts get flagged so they don’t quietly sneak into your next postcard run. No spreadsheets to maintain, no manual lookups, and no guessing.
The workflow starts with a HighLevel-triggered webhook. Then it verifies the address through Lob using an HTTP request. Finally, it updates the contact in HighLevel so your CRM becomes the source of truth for who is safe to mail.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you add 100 new contacts in HighLevel each week from ads, forms, and imports. Manually verifying addresses (even a quick check) can take about 2 minutes per contact, so you’re spending roughly 3 hours just confirming data before you mail. With this workflow, it’s basically instant: the webhook fires when the contact is created, Lob verifies in the background, and HighLevel gets updated automatically. You keep the 3 hours, and you avoid mailing to the obviously bad records.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HighLevel to capture contacts and store deliverability status.
- Lob for address verification and deliverability signals.
- API keys (get them from your HighLevel app settings and Lob dashboard)
Skill level: Beginner. You’ll connect accounts, paste API keys, and test the webhook with a sample contact.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A new contact in HighLevel triggers the workflow. HighLevel sends the contact payload to n8n using an inbound webhook, so you don’t need polling or scheduled checks.
The address fields are normalized. n8n maps the incoming HighLevel fields (street, city, state, ZIP, country) into a clean structure so Lob receives exactly what it expects.
Lob verifies deliverability. An HTTP request hits Lob’s address verification endpoint and returns a result you can act on, not just “looks valid.” This is the heart of the automate address verification step.
HighLevel gets updated based on the outcome. If the address is deliverable, the workflow updates the contact accordingly. If it’s not deliverable, a different update runs so you can segment, notify someone, or suppress the record from direct mail lists.
You can easily modify what “deliverable” means for your team and where you store the result in HighLevel (a tag, a custom field, or both). See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound webhook that receives contact and address data from your CRM.
- Add and open Inbound CRM Webhook.
- Set HTTP Method to
POST. - Set Path to
727deb6f-9d10-4492-92e6-38f3292510b0and save the node to generate the webhook URL. - Test the webhook with a sample payload containing
address,city,state,zip_code,email, andphone.
Step 2: Set Up Address Mapping
Normalize incoming address fields so the verification request is consistent.
- Add Map Address Fields and connect it to Inbound CRM Webhook.
- Enable Include Other Fields.
- Map the following fields using expressions: address to
{{ $json.address }}, address2 to(leave blank), city to{{ $json.city }}, state to{{ $json.state }}, and zip to{{ $json.zip_code }}.
zip_code. If your CRM sends zip instead, update the expression in Map Address Fields accordingly.Step 3: Configure Address Verification
Send the mapped address to the verification service and retrieve deliverability status.
- Add Verify Mailing Address and connect it to Map Address Fields.
- Set URL to
https://api.lob.com/v1/us_verificationsand Method toPOST. - Enable Send Body and set the body parameters: primary_line to
{{ $json.address }}, secondary_line to{{ $json.address2 }}, city to{{ $json.city }}, state to{{ $json.state }}, and zip_code to{{ $json.zip_code }}.
Step 4: Route by Deliverability and Update CRM
Branch the flow based on deliverability and tag the CRM contact accordingly.
- Add Route by Deliverability and connect it to Verify Mailing Address.
- Set Value 1 to
{{ $json.deliverability }}and Data Type tostring. - Create two rules: one where Value 2 equals
deliverablewith output keydeliverable, and another where Operation isnotEqualand Value 2 isdeliverablewith output keyNOT deliverable. - Connect the
deliverableoutput to Update CRM Deliverable and theNOT deliverableoutput to Update CRM Not Deliverable. - In Update CRM Deliverable, set Email to
{{ $('Inbound CRM Webhook').item.json.email }}, Phone to{{ $('Inbound CRM Webhook').item.json.phone }}, and add Tags asMailing Address Deliverable. - In Update CRM Not Deliverable, set Email to
{{ $('Inbound CRM Webhook').item.json.email }}, Phone to{{ $('Inbound CRM Webhook').item.json.phone }}, and add Tags asMailing Address NOT Deliverable. - Credential Required: Connect your highLevelApi credentials in both Update CRM Deliverable and Update CRM Not Deliverable.
Step 5: Test and Activate Your Workflow
Validate the flow end-to-end and enable it for production use.
- Click Execute Workflow and send a POST request to the Inbound CRM Webhook URL with sample address data.
- Confirm Verify Mailing Address returns a response containing
deliverability. - Verify that Route by Deliverability directs the item to the correct CRM update node.
- Check your CRM to confirm the contact is tagged as
Mailing Address DeliverableorMailing Address NOT Deliverable. - Once successful, toggle the workflow to Active to run continuously.
Watch Out For
- HighLevel credentials can expire or the app may lack the right scopes. If updates stop writing back, check your HighLevel app permissions and the credential status inside n8n first.
- If Lob returns unexpected results, it’s often a formatting issue. Double-check the “Map Address Fields” step so you’re sending street, city, state, and ZIP in the right places.
- Deliverability routing is only as useful as your CRM fields. If you don’t store the result somewhere visible (tag or custom field), your team will keep mailing “unknowns” out of habit.
Common Questions
About 10–30 minutes if your API keys are ready.
Yes. No coding is needed, but you do have to copy API keys and run a quick test contact through HighLevel.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Lob verification costs (Lob includes a free tier for a few hundred US address verifications).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can change what happens in the “Update CRM Deliverable” and “Update CRM Not Deliverable” steps to match your process. Common tweaks include writing the Lob result into a custom field, adding a “Mail Ready” tag, or notifying a teammate when an address fails verification. If your HighLevel setup uses different field names, adjust the “Map Address Fields” mapping so Lob receives the right parts of the address.
Usually it’s an API key issue or a missing permission in Lob. Regenerate the Lob API key, update the credential in n8n, then re-run the workflow with a single test contact. If it still fails, inspect the HTTP response body from the “Verify Mailing Address” request, because Lob will often tell you which field is missing or malformed.
It scales to thousands of contacts per month for most small teams, and self-hosting removes execution limits (your server becomes the limiter).
Often, yes, especially if you want more control over branching and data handling without paying extra for every conditional path. n8n is also easier to grow with because you can self-host for high-volume workflows, which keeps costs predictable. Zapier and Make are still fine when you want a very quick setup and the logic is simple. The real deciding factor is how “opinionated” you want your deliverability rules to be, and whether you plan to expand the workflow later (notifications, spreadsheet logging, suppression lists, and so on). Talk to an automation expert if you want help choosing.
Once address verification is automatic, direct mail gets simpler. Your list stays clean, returns drop, and you can focus on the offer instead of fixing data.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.