Outbound in Odoo: From Contact List to the Next Move
Contact import, cold sequences and reply tracking in one Odoo instance instead of four tools. The analysis layer above it is reference architecture.
- Industry
- B2B sales · SaaS · services · industry
- Build, estimated
- 5–8 weeks
At a glance
- It starts with
- Target profile search
- The machine handles
- 14 of 15 steps
- A person keeps
- Sales decides
- Bottom line
- €0Extra sequencing tools
The problem
The usual mid-market outbound stack is four tools that know nothing about each other. A data source for contacts. A sequencing tool for the emails. A CRM for the pipeline. And a spreadsheet where somebody manually stitches together what happened in the first three.
That is not a data problem, it is flying blind. The CRM says a lead exists. The sequencing tool says it opened twice and never replied. Nobody sees both at once — so sales works the list by creation date instead of by signal.
Then there is the second blind spot. A complex B2B decision typically involves six to ten people, according to Gartner. Usually exactly one of them gets emailed — and when that person leaves the company, the deal is gone before anyone notices.
This showcase shows the whole chain running inside one Odoo Community instance: import, outreach, replies, pipeline and analysis in the same database. And it shows where the chain breaks first in Germany — the legal basis, not the technology.
Odoo Community ships a full CRM but no sequencing logic: the Marketing Automation app belongs to the Enterprise edition, and even sending a single email to a lead is more awkward in Community than expected. So a second tool gets bolted next to the CRM — licensed per seat, with its own contact database, its own statistics, and a sync that holds up exactly until someone renames a field.
The consequences are concrete. Enriched contact data arrives dirty: the same company sits in the system four times as Google, Google LLC, Google Inc and Google Germany, and sales emails the same people twice. Follow-ups get skipped, because they hang off a reminder somebody has to set by hand. Replies land in a mailbox, not on the lead, and never become visible in the CRM. And a lost deal is closed with one click on Lost without recording why — after fifty lost deals nobody knows whether it was price, timing or a missing feature.
A word on numbers: plenty of open and reply rate benchmarks circulate for cold outreach, almost all of them published by vendors of such tools and methodologically weak. We deliberately leave them out. The defensible statement is structural, not statistical: what sits in four systems cannot be analysed together.
And the point outbound vendors rarely stress: in Germany, email marketing without prior explicit consent is an unreasonable nuisance under § 7 (2) no. 2 UWG — including business-to-business. Cold emailing German companies is therefore not a grey area but generally unlawful. Build the mechanics without planning for that step and you have built a legal risk on a timer.
The process, step by step
Scroll through. The diagram stays put and highlights the step you are on.
- 01
Target profile search
Industry · size · role · country
The flow does not start with a list of names but with a profile: industry, company size, role, seniority, country. That profile is the one lever that moves every other number later — and at the end of the flow it gets sharpened by the deals that were won and lost.
- 02
Import contacts
Apollo.io incl. enrichment
The connector pulls matching companies and contacts from Apollo.io into the Odoo data models, enriched fields included: position, department, seniority, headcount, country, sometimes technology stack. Those fields are the raw material of the analysis later on.
- 03
Merge duplicates
Google LLC = Google Inc
Before records are created, the duplicate check runs. Spelling variants of the same company — Google, Google LLC, Google Inc, Google Germany — are recognised and merged. That prevents duplicate records, and above all the embarrassing double approach to the same person from two campaigns.
- 04
Build buying committee
Roles · seniority · gaps
From the roles of the imported contacts, a picture of the decision group forms per account: who decides technically, who decides commercially, who procures. The gaps become visible too — a group without a single contact in finance or purchasing, for instance.
- 05Branch
Legal basis in place?
The decisive gate, and in Germany the first one: is there a defensible legal basis for emailing this contact? Explicit consent, an existing customer relationship under § 7 (3) UWG, or a target market with a different regime. The check happens here, not in the head of whoever presses send.
- 06
Suppressed
no send, documented
Without a basis, the flow ends for this contact. They go onto the suppression list, the decision is documented, and no sequence picks them up again. That is not a failure but the intended outcome: the most expensive contact is the one that triggers a cease-and-desist letter.
- 07
Sequence starts
Multi-sender · limits · warm-up
The sequence starts: several steps, defined delays, multiple sending mailboxes with their own limits and a warm-up phase. Spreading across senders and respecting limits is not an optimisation but the precondition for mail being delivered at all.
- 08
Read replies back
IMAP · bounce · objection
Replies are read back via IMAP and attached to the right lead — bounces, out-of-office notes and objections included. The reply therefore lands on the record instead of in a personal mailbox where it would stay invisible to the rest of the team.
- 09Branch
Reply received?
The second gate evaluates what came back. A genuine reply stops the sequence immediately — nothing looks less professional than automated step three arriving after someone has answered. Without a reply, the contact moves to the next follow-up step.
- 10
Next follow-up step
delayed, and finite
The follow-up step is delayed and finite: it loops back into the sequence until the last defined step has been sent, then outreach ends. That loop is exactly the step that fails first in the manual version.
- 11
Deal health score
Signals from mail · CRM · profile
From here the analysis layer works. The signals produce a priority: who opened, who replied, how long the silence has lasted, whether a meeting exists, what role the person holds. The score never stands alone — always next to the factors that produced it.
- 12
Next move
Suggestion with a reason
The state becomes a suggestion with a reason: call today, because two people opened and nothing has happened for nine days. Or: switch to a second channel. The difference from a reminder is the reason — it makes the suggestion checkable.
- 13Human decides
Sales decides
Call · LinkedIn · proposal
This is where automation stops. The suggestion is a suggestion; whether to call, write or discard is up to sales. That decision is deliberately not automated away — it is the point where experience beats any heuristic.
- 14
CRM updated
Stage · activity · history
Whatever was decided lands directly on the lead: stage, activity, note, meeting. Because sequence and pipeline share one database, this is not a re-import but the same record — and the next score calculation already knows about the decision.
- 15
Win/loss analysis
sharpens the target profile
At the end sits the analysis across all deals: won and lost, grouped by reason, industry, size, role and country. The result feeds back into the target profile search from step one — a linear flow becomes a loop that gets sharper with every round.
What changes
Possible setup, not a packaged product
The figures are modelled target values for a possible setup, derived from industry benchmarks and our own tests. They do not come from a customer project; real values depend on your business. We do not sell this setup as a finished product: we measure where your bottleneck is, then build with your team. For systems that require certification (e.g. HIS, gematik, DATEV-certified) we work with specialised partners.
Before vs. After
| Aspect | Before | After |
|---|---|---|
| Tooling | Before: Data source, sequencing tool, CRM and a spreadsheet in between | After: One Odoo instance, one database, one contact base |
| Data quality | Before: Same company four times, same person emailed twice | After: Matching before creation, duplicates merged |
| Decision group | Before: One contact per account, often the wrong one | After: Buying committee visible, missing roles flagged |
| Prioritisation | Before: List by creation date, gut feeling decides | After: Score with visible factors and a justified suggestion |
| Legal basis | Before: Trusting that nobody objects | After: Checked step before every send, suppression documented |
| Lost deals | Before: Lost with one click, no reason recorded | After: Reasons clustered, fed back into the customer profile |
Technology
Technology Stack
Integrations
Systems this setup can connect to
- Odoo 19 Community (CRM)Pipeline
- Leads, stages, activities and meetings as the system of record — the same database that holds sequences and replies
- Apollo.io APIContact source
- Company and person data including enrichment: position, department, seniority, headcount, country and sometimes technology stack
- Import and enrichment moduleOdoo module (in-house)
- Field mapping, duplicate matching before records are created, and transfer of enriched fields into the Odoo data models
- Sequence and follow-up moduleOdoo module (in-house)
- Multi-step sequences, delays, multiple senders, sending limits, reply tracking and an automatic stop on reply
- Direct sending from the CRMOdoo module (in-house)
- Closes the Community edition's gap when emailing leads — sending on the record instead of through a second tool
- SMTP / IMAP multi-senderDelivery
- Separate sending domains and mailboxes with SPF, DKIM, DMARC, warm-up, limits and bounce processing
- LLM (GPT-4 class / Claude)Analysis
- Reply drafts from CRM context, reasons behind the next move, and clustering of loss reasons — concept part of the architecture
- PostgreSQLData foundation
- One database for import, sequence and pipeline — the technical reason the analysis layer works at all without exports
Security & Compliance
What the setup takes care of
- Data stays in your own instance
- Contacts, sequences and replies live in the self-operated Odoo database — not in a sequencing vendor's tenant. Hosting in an EU data centre or on premise is a configuration question, not a migration.
- Consent, objection, suppression
- Legal basis per contact, an unsubscribe link in every mail, objection under Art. 21 GDPR as a hard stop: an entry on the suppression list is respected by all sequences, including future ones.
- Sender protection and deliverability
- SPF, DKIM and DMARC per sending domain, separate mailboxes with warm-up and sending limits, bounce handling. That protects not only the rate but the reputation of the main domain your regular business mail depends on.
- Provenance of enriched data documented
- Every contact records which source it came from and when it was imported — the basis for the Art. 14 GDPR notification duty and for a deletion policy covering records that were never contacted.
Frequently Asked Questions
What would this look like at your company?
This workflow is a demo. Whether it pays off for you depends on where things get stuck at your company. The method page shows how to find out. To place a workflow of your own, use the free assessment. No call needed.