The platform

Everything between your data and their inbox.

Seven parts, one system. Each is useful on its own; together they're the reason a campaign, a journey and an audit all agree with each other.


01 — Customer data

A canonical profile, and the graph behind it.

Inbound records rarely arrive clean. A profile in OrnexReach is the person; the identifiers — email addresses, phone numbers, CRM ids — are edges that resolve onto them.

Identity resolution

Every inbound event is resolved onto an existing profile or creates one, so behaviour accumulates against a person rather than an address.

Auditable merges

Duplicates fold together non-destructively, and the merge history is kept so you can see what was combined and when.

Traits and timeline

Profiles carry traits from your systems and a filterable activity timeline of everything they've done and received.

// one person, several identifiers { profileId: "prf_8f2c…", identifiers: [ { type: "email", value: "ada@example.com" }, { type: "email", value: "a.lovelace@work.com" }, { type: "phone", value: "+447700900123" }, { type: "external_id", value: "crm:00Q1t000…" } ], emailConsent: "opt_in", smsConsent: "unknown", traits: { plan: "pro", renewalDate: "2026-11-04" } }

02 — Consent

A ledger you can hand to a regulator.

Consent is stored as an append-only sequence of events, each with its source and timestamp. The current state is derived from that sequence, never written over it — so “why did this person receive this?” has an answer.

Most-restrictive-wins projection

The projection is recalculated on every entry. A later opt-out always beats an earlier opt-in for the same identifier and purpose.

Connectors revoke, never grant

An opt_in arriving from a CSV or a CRM sync is treated as unverified evidence, not permission.

Enforced twice

The consent gate runs when a send is created and again when it fires, so a permission withdrawn between scheduling and sending is honoured.

Audited override

Where genuine off-platform evidence exists, an administrator can attest to it — a named person, a stated basis and a permanent record. API keys can't self-attest.

Why append-only matters. Systems that store consent as a single mutable flag can only ever tell you what they believe today. A ledger tells you what was true at the moment you pressed send — which is the question that actually gets asked.

03 — Composition

An email builder that respects your brand and Outlook.

Blocks on a canvas, rendering to HTML that survives the clients your customers actually use. Brand themes are applied when an email is created — never retroactively — so editing a theme can't quietly restyle a campaign that already went out.

Themes

Palette, fonts and button style as workspace tokens, baked into new emails at creation, on clone, or extracted from an email you already like.

Saved sections

Reusable blocks — a footer, a header, a standard offer panel — with one workspace default footer inserted automatically.

Media library

Per-tenant image storage on a CDN with automatic email-safe variants. Assets used in a sent email are frozen so the URL never breaks.

Versioning and staging

Every content change creates a version. Templates move draft → test → active, and only active templates can be resolved by a live rule.

Merge fields

Personalisation through Handlebars merge fields drawn from profile traits and event payloads, with a picker so nobody has to remember the syntax.

04 — Audience

Segments built from what people did, not just who they are.

Browse the event stream by data object, then turn what you find into a segment. Conditions combine profile traits, consent state and event history — including predicates on the event payload itself and aggregates like “more than two in the last 30 days”.

Data explorer

Every registered data object is browsable, with headline columns derived from its schema and the full payload one click away.

Groups of conditions

AND within a group, OR across groups, so “lapsed members or trials that never converted” is one segment rather than two.

Preview before you commit

Every definition previews a count and a sample of matching rows before it's attached to anything.

Describe it in plain EnglishAI

Describe the audience and get a definition back. Trait keys and event types are checked against your actual vocabulary — the model can't invent a field you don't have.

// "engaged members whose renewal is close" [ { conditions: [ { trait: "plan", op: "eq", value: "pro" }, { event: "email.opened", agg: { fn: "count", op: "gte", value: 2 }, within: "30d" }, { consent: "email", is: "opt_in" } ]}, // … OR a second group ] // preview → 412 profiles

05 — Automation

Journeys an administrator can build on a Tuesday.

Register the event, write the rule, choose the template. Rules react to anything you send us — there's no fixed vocabulary of events you're allowed to use.

Filters, delays and throttles

Fire immediately, after a delay, or relative to a date carried in the event — three days before the due date on an invoice, for example.

Cancel conditions

A scheduled reminder can be cancelled by a later event, scoped to the thing it was about, so paying invoice #1 doesn't cancel the chase on invoice #2.

Guard rails

Loop detection, chain-depth limits, per-workspace fire quotas and a retry cap, so an automation can't run away with your sending reputation.

Dry-run first

Test-fire any rule as a dry run and see exactly what would have been created, before a customer sees anything.

06 — Delivery

Two channels, one send API.

Email through Amazon SES v2, SMS through AWS End User Messaging, both behind the same request shape. Marketing and transactional traffic are physically separated so a big campaign can't delay a password reset.

Idempotent by design

Supply an idempotency key and a retry is a no-op rather than a duplicate message.

Suppression that sticks

Hard bounces, complaints and manual entries suppress across the workspace, and removals from the list are audited and require confirmation.

Engagement events

Delivery, bounce, complaint, open and click come back as canonical events — usable in segments and rules like any other.

Reporting and reconciliation

Campaign analytics with CSV export, plus a daily job that reconciles our record against what the providers actually report.

POST /api/v1/sends X-API-Key: rch_live_… { to: "ada@example.com", templateSlug: "invoice_due_soon", messageClass: "transactional", idempotencyKey: "inv_10482:due_soon", mergeData: { invoiceNumber: "INV-10482", amountDue: "£1,240.00", dueAt: "2026-09-01" } } // → 202 { id, status: "queued" } // same key again → the same id, not a second email

07 — Administration

Multi-tenant, because you asked for it first.

Workspaces are not a bolt-on. Every table that holds tenant data carries a workspace, every read is filtered by it, and cross-tenant access returns a 404 — so a mistyped id tells an attacker nothing.

Roles

Member, organisation admin and platform super-admin, enforced on the API and reflected in the portal — sensitive pages are gated, not merely hidden.

Scoped API keys

Per-workspace keys with scopes and rate limits, plus sandbox keys that exercise the whole path without sending anything real.

Domain authentication

SPF, DKIM and DMARC set-up per sending domain, with verification status visible in the portal.

Quotas and audit

Per-workspace quotas on sending and automation, and an audit log covering the changes that matter.

Note for platform teams. OrnexReach is designed to be operated by one organisation on behalf of several — agencies, groups, and product companies with separate brands. Tenancy is enforced in the data layer rather than trusted to application code.

On the roadmap

What we're building next.

Listed here because it's in active development rather than shipped — we'd rather you know the difference.

Subject line and preheader assistanceIn build

Generated options grounded in the email you've actually written, with your brand voice as a constraint rather than a suggestion.

Deliverability checksIn build

A findings-first review of an email before it goes — unsubscribe presence, clipping size, image ratio, link hygiene — as advice, never as a blocker.

Brand voice profilesPlanned

A workspace-level record of how you write, including claims nobody is allowed to make, enforced on anything generated.

Preference centrePlanned

A hosted, brandable page where customers choose what they hear about, writing straight into the consent ledger.

Brand import from a websitePlanned

Point at a URL or an email you already send, and get a theme back with your palette, fonts and button style.

Semantic search across saved sectionsPlanned

Find the block you wrote four months ago by describing it, not by remembering what you called it.

See it against your own data.

A 30-minute walkthrough: connect a sample list, build one journey, and look at what the consent ledger records. No slideware.

Book a demo Explore the platform