All docs

Connecting Odoo to Attribi

Connect your Odoo instance to send confirmed sales orders and CRM lead stage changes to your ad platforms as closed-won and qualified conversions.

Attribi reads from your Odoo instance to build two conversion signals: sales orders (sale.order, which become closed-won conversions carrying real revenue) and CRM leads (crm.lead, whose stage transitions drive the qualified-stage signal). Matching a Sales Order to a website visitor also requires reading its linked Contact (res.partner) for the buyer's email, and matching a CRM Lead to its configured stage requires reading your CRM Stages (crm.stage) — four models in total, not two. Both signals are pushed to your connected ad platforms so their bidding optimises on real pipeline, not just form fills.

Setup takes about five minutes and needs no code changes in Odoo.


Before you start — check your Odoo plan

Odoo Online's free single-app plan does not allow external API access. If you're on the free tier, connecting will fail no matter how correct your credentials are — there's no fix on our side. Upgrade to a paid Odoo Online plan (or use Odoo.sh / a self-hosted instance) before connecting. This is by far the most common reason a connection attempt fails, so rule it out first if you hit an authentication error.

What you'll need

  • An Odoo user with read access to Sales Orders, CRM Leads, and Contacts (an Odoo admin or sales-manager account works; a restricted portal user does not). Contacts access matters even though you won't see it mentioned elsewhere in Odoo's UI as a "CRM permission" — we resolve a Sales Order's buyer email through the linked Contact record, so a user who can read Sales Orders but not Contacts will connect successfully and then silently match nothing.
  • Your Odoo database name.
  • An API key for that user.

Step 1 — Create an API key in Odoo

  1. Log into Odoo, click your avatar (top right) → My Profile.
  2. Go to Settings → Users & Companies → Users, open your user record (or the service account you want Attribi to use).
  3. Under the Account Security tab, find API Keys and click New API Key.
  4. Give it a description like Attribi and confirm. Odoo shows the key once — copy it immediately. If you lose it, revoke the old key and create a new one.

Step 2 — Find your database name

Your database name is the identifier in your Odoo URL and login screen, not your company name. Two common places to find it:

  • The URL when logged in: https://your-database.odoo.com — the part before .odoo.com is the database name.
  • The login screen, if your instance serves multiple databases: it's listed in the database selector dropdown.

For self-hosted / Odoo.sh instances, ask whoever manages the Odoo deployment if you're not sure.

Step 3 — Connect in Attribi

  1. Go to Connections in Attribi and find Odoo under CRMs.

  2. Click Connect and enter:

    • Odoo URL — e.g. https://your-database.odoo.com
    • Database name
    • Username (the login email for the user whose API key you created)
    • API key
  3. Save. Attribi validates the credentials live before saving the connection: first that they authenticate, then a test read against Contacts (res.partner) to confirm this user actually has permission to read what the sync needs — not just that the password is correct.

  4. Pick which CRM lead stages count as Qualified — the stage picker lists your actual crm.lead stages so you choose the ones that match your sales process (e.g. "Qualified", "Proposal Sent").

    There is deliberately no stage picker for Closed Won. Revenue comes from a confirmed Sales Order (sale.order reaching Sales Order or Done), not from a lead's stage — the order is where the actual amount and currency live. Moving a lead to a Won stage on its own does not record revenue; the quotation has to be confirmed into a Sales Order.

What happens after connecting

In OdooIn AttribiSent to your ad platforms
CRM lead reaches a stage you marked QualifiedLead marked QualifiedQualified conversion, no value
Quotation confirmed into a Sales Order (state Sales Order or Done)Lead marked Closed WonPurchase conversion with the order total and currency

Matching is by email in this version. A lead or order with no email address can't be tied to a website visitor, so it's skipped rather than guessed at — we'd rather report nothing than attribute revenue to the wrong journey.

Attribi polls Odoo on a daily schedule to pick up new leads and stage changes — this isn't a live webhook, so expect up to a day of lag between an Odoo change and the matching conversion showing up.

Also running Shopify? If your Shopify→Odoo connector syncs orders into Odoo (so the same sale exists as both a Shopify order and an Odoo Sales Order), Attribi does not currently detect that overlap — the same sale can be recorded as closed-won twice, once from each source. If you run both integrations, tell us and we'll help reconcile it.


What we do NOT do in v1

  • No write-back into Odoo. Attribi does not push attribution fields (first-touch source, campaign, click ID, etc.) into crm.lead or any other Odoo object yet. Your Odoo records are unchanged by connecting — this is a read-only integration for now. If in-CRM attribution fields on the Lead form are important to you, that's on the roadmap but not shipped.
  • No custom field provisioning. Unlike our other CRM integrations, there's nothing to set up on the Odoo side beyond the API key — we don't create any fields or automations in your database.
  • Revenue comes only from confirmed Sales Orders. A lead moved to a Won stage with no confirmed Sales Order records nothing — not a zero-value conversion, nothing at all. We don't estimate revenue from an Opportunity's expected-revenue field, because a guessed amount would train your ad platforms on numbers that never existed. If your team closes deals without confirming a quotation into a Sales Order, those sales will not reach your ad platforms; tell us and we'll look at your pipeline shape.

Troubleshooting

What you seeWhat it means
"Invalid credentials" or an authentication errorDouble-check the database name (not your company name) and that the API key hasn't been revoked. Also confirm you're not on Odoo Online's free single-app plan — see above.
"...this user can't read Contacts"The credentials are valid but this Odoo user's access rights don't include read access to Contacts (res.partner). Grant it (Settings → Users & Companies → Users → your user → Access Rights) and reconnect.
"Could not reach the instance"The Odoo URL is wrong, or the instance is behind a firewall/VPN that blocks outside requests.
Connected, but no leads are matchingCheck that leads in Odoo actually have an email address on the CRM lead or its linked contact — Attribi can't match without one.
Qualified stage never firesRe-open the stage picker in Connections and confirm the stages you selected are the ones your team actually moves leads through — Odoo lets you rename/reorder stages, which can drift from what was picked at connect time.
Deals close in Odoo but no Closed Won appearsThe quotation was never confirmed into a Sales Order — a Won stage alone doesn't record revenue. Check the order's state is Sales Order or Done.
Closed Won appears with the wrong amountWe record the order's amount_total (tax and shipping included) as it was at the moment we first synced it. Editing the order in Odoo afterwards does not correct the figure already sent to your ad platforms — we deliberately never re-fire a closed-won conversion for the same lead, because that would double-count. Email us with the order reference and we'll correct it.

Still stuck? Email hello@attribi.com with your database name and roughly when the lead or order was created.


Need help? Contact us or sign in to your connections page for account-specific tooltips.