Checking access...
← Back
ADMIN ONLY CAMPAIGN CRM

TLH Outreach Hub

A controlled admin workspace for agent prospect research, CSV imports, suppression controls, scheduled outreach campaigns and guarded email queue processing.

Compliance guardrail: unsubscribed, bounced and do-not-contact records are suppressed here and must not be emailed. Campaign queueing recomputes eligible recipients, sends in capped batches, includes an unsubscribe link in every email and records send outcomes.

0

Total contacts

0

With email

0

No email (call list)

0

Follow-ups due

Most common Create campaign

Build, preview, save and queue guarded outreach from one place.

Manual entry Add contact

Add one prospect manually, then save notes or select them for a campaign.

Bulk entry Import CSV

Preview a spreadsheet import before saving new unsuppressed contacts.

Phone outreach Call lists by county

Open no-email prospects per county — call, log and update details.

Recipients Select contacts

Select contacts or use filters before queueing a campaign.

Saved work Saved campaigns

Load a previous draft or queued send — including County Launch.

Saved campaigns

Campaigns

Recent campaign drafts and queued sends. Click Load into builder on a card (or the card itself) to open it for sending.

Checking delivery tracking...
Loading campaigns...
Manual entry

Add Contact

Add one prospect manually or update an existing contact. Select a row from the table to edit an existing record.

Create campaign

Campaign Builder

Build a simple outreach email from visible copy fields, add one optional asset, preview it, then save and queue to eligible contacts. Select contacts or use filters before queueing.

Before queueing: confirm the lawful basis, test with a small segment, and check that every recipient is relevant. Suppressed contacts are always skipped and the send function adds the unsubscribe link.
1. TemplateChoose County Launch or another layout.
2. Copy & previewEdit fields and check the email preview.
3. TargetFilter contacts or tick selected rows.
4. SaveSave the campaign draft.
5. Preview recipientsConfirm how many will receive email.
6. Queue or sendQueue only, or use Queue & send now.
7. Run senderOptional if you queued without sending.

Edit Simple Copy Fields

These fields generate the polished email preview and plain-text fallback. Use merge tags like {{contactName}}, {{agencyName}}, {{town}} or {{county}} where helpful.

Select contacts or use filters before queueing. Manual selections still skip invalid email, unsubscribed, bounced, do-not-contact and suppressed records.

Optional Image or Document Asset

Images appear near the top of the email. Documents are shown as a neat button link. Uploaded files are served from tlhportal.co.uk for better deliverability, not raw Firebase Storage links.

Advanced email code
Only edit this if you need custom HTML. The simple fields above will regenerate it.
Plain text fallback
The send function appends a compliant unsubscribe line automatically.

Fastest path: Save campaign → Preview recipient count → Queue & send now. Use Queue campaign + Run sender now if you want two separate steps. Leave “Send after” blank for immediate send.

Email Preview

Bulk entry

Import Agent Prospects

Upload a CSV with headers. Common columns are mapped automatically: email, agency/company, contact/name, phone, website, town and county. By default existing emails are skipped; enable overwrite to update matching contacts with the latest scraped fields (suppression flags are preserved).

Phone outreach

Call lists by county

These are prospects with no email address — mostly Rightmove phone-only imports. Pick a county to open its call list below. Use the agency website (about/contact pages) to find emails, or Call for phone outreach. After contact, Edit or Log call to update details.

Loading call lists...

Email found — ready to invite

When enrichment or manual edits add an email to a phone-only prospect, they appear here by county — separate from the call lists — so you can send invitations without double-contacting agents already called or already emailed.

Loading enriched lists...
Recipients

Contacts

Find, edit and select prospects for campaign targeting. Tick contacts here, then choose selected contacts in the Campaign Builder before queueing. Rightmove imports are mostly phone-only — use Call lists by county above for phone outreach, or filter No email only here. Use Has email before email campaigns.

Bounced and suppressed emails are auto-deleted from the contact list when Resend reports them, and kept on a blocklist so CSV import cannot re-add them.

No contacts selected for campaign.
Contact Agency Area Status Follow-up Suppression
Loading contacts...

One-to-one Copy Template

Optional fallback for a manual one-to-one email. Use the campaign builder above for guarded sends, recipient suppression and automatic unsubscribe links.

Suppression Safeguards

Do not email suppressed contacts. Records marked unsubscribed, bounced or do-not-contact are skipped during CSV import and flagged in the table.

Campaign sends are split into queue records and processed by a scheduled Firebase Function. Unsubscribe tokens are required before sending; bounced, unsubscribed and do-not-contact contacts are suppressed before queueing and again before send.

Included in this MVP: - Bulk queue-to-eligible campaigns - Resend API delivery in capped batches - Scheduled sendAfter/dueAt support - Unsubscribe endpoint with stored per-contact token - First-party click tracking for campaign links and assets - Provider webhook endpoint for bounce/complaint/unsubscribe events External setup still required: configure the Resend webhook URL, validate webhook signing/token strategy, authenticate the sending domain and start with a small test segment.