CRM
Most attribution tools treat a CRM stage as revenue. Odoo gives Attribi something better: a confirmed sales order, with a real total and a real currency, which is the same number your finance team reports. Attribi reads those orders on a schedule and uploads each one to every ad platform you have connected as a closed-won conversion. This connection runs one way only, so nothing is written back into Odoo and no Attribi fields appear on your records.
No credit card required · 5-minute setup
Attribi reads sales orders Odoo itself has moved to confirmed or done, using the order state rather than a label anyone can rename, and uploads the order total in the currency the order carries. Quotations are not revenue and are never counted.
Name the crm.lead stages that mean qualified for your team and each lead reaching one fires a qualified conversion. Odoo installs rename stages freely, so Attribi never assumes a default: leave the list unset and the qualified pass does not run at all.
Odoo carries an expected revenue figure on every CRM lead. Attribi does not read it, and a qualified conversion is sent with no value attached rather than a number nobody has been paid. Only a confirmed order puts money on a conversion.
Attribi connects over Odoo’s own API with a user API key rather than an OAuth app, so a self-hosted or Odoo.sh instance connects exactly like a hosted one. Nothing is installed into Odoo and no module has to be approved.
Planned, not live today. Listed so you can see what this integration does not do yet, before you sign up.
Writing the campaign, source and journey onto the Odoo record so your sales team sees them where they work, and pushing a new lead into Odoo when someone converts on your site. Neither exists today: Odoo is read-only, unlike the HubSpot, Salesforce, Zoho and Pipedrive connections.
Not yet available.
Odoo Online’s free single-app plan blocks external API access entirely, and no credentials will work on it. That is by far the most common reason a connection attempt fails, so rule it out before anything else. A paid Odoo Online plan, Odoo.sh, or a self-hosted instance all work.
In Odoo, open your user record under Settings, Users and Companies, and create an API key from the Account Security tab. Odoo shows it once. Paste it into Attribi along with your Odoo URL, database name, and the login email of that user. Attribi validates the credentials live before saving.
The user needs read access to Sales Orders, CRM Leads, Contacts, and CRM Stages. Contacts is the one people miss: without it Attribi connects successfully and then matches nobody, because the buyer’s email lives on the linked contact. Then list the CRM stages that mean qualified.
Stages Attribi supports for Odoo.
Data source
Shopify multi-touch attribution: paid orders reach Attribi straight from your store with their real total, then upload to your ad platforms as revenue.
Ad platform
Google Ads offline conversion tracking: send qualified leads and closed-won revenue from your CRM, so your account sees CRM-verified outcomes, not just form fills.
Ad platform
Meta Conversions API for CRM: send qualified leads and closed-won revenue from your CRM to Meta server side, with hashed email, phone, and Instant Form lead IDs.
No. This connection reads and nothing else. There are no Attribi custom fields on your contacts or leads, no lead is ever created in Odoo, and no record is modified. That is a genuine difference from the HubSpot, Salesforce, Zoho and Pipedrive connections, where campaign data is written onto the record for your reps to see. If in-Odoo attribution matters to you, it is on the roadmap and is not in the product today.
By email address only. Attribi reads the contact linked to the sales order, takes the email from that contact record, and matches it against the person it already knows. Phone numbers are not used and neither is an ad click ID, because with no fields written into Odoo there is nowhere for a click ID to have been stored. That means match rates depend on your contacts carrying accurate email addresses, and installing the Attribi script is what adds click-level matching for Odoo customers.
A sales order that Odoo has moved to a confirmed or done state becomes a closed-won conversion carrying the order total and the order’s own currency. A CRM lead that enters one of the stages you nominated becomes a qualified conversion with no value on it. Quotations and draft orders are ignored entirely, and Odoo’s expected revenue field is never uploaded, because it is a forecast rather than money received.
Closed-won is unaffected, because it reads the order state rather than a stage name, so a renamed pipeline never stops revenue reporting. Qualified detection does use stage names, since that is how Odoo identifies CRM stages, so a rename there means updating the list in Attribi. Until you do, the qualified pass matches nothing rather than guessing at a replacement, which is deliberate: firing nothing is better than firing on the wrong stage.
On a schedule, and you can also trigger a read from the Connections page after a big close. Attribi tracks where it left off and only asks Odoo for records modified since then. If a run cannot finish enumerating, it deliberately does not move that marker forward, so the next run re-reads the same window rather than skipping orders. Duplicate reads are safe: an order that has already been counted is never counted twice.
Updated
Sign up and connect it from the Connections page.
Start FreeNo credit card · Free forever up to 1,000 visitors