For Odoo distributors

SideQuest for Odoo Beta

The same PO automation our QuickBooks Online customers use — now reading inbound customer POs from Gmail and drafting Quotations directly in Odoo. Currently in private beta with a waitlist.

What "Beta" means here

The connector is built and runs end-to-end on a live Odoo 17 sandbox: parses real PO emails, matches lines against your catalog, stages a local draft for review, submits as a Quotation, and learns customer part-number mappings over time. What it hasn't done yet: ship to a paying customer. We're recruiting one external tester before opening signup. Join the waitlist and we'll add you to the first batch when the gate opens.

How it works

Step 1

PO arrives in Gmail

Customer emails you a PO. SideQuest reads the labeled email — PDF, scan, photo, or plain text in the body.

Step 2

Lines match the Odoo catalog

A 5-step cascade matches every line to a product in your Odoo: exact SKU, learned cross-reference, partial, description, fuzzy. Unmatched lines flag for review.

Step 3

Draft Quotation, human review

SideQuest builds a local draft. You see what matched, what didn't, and any price variance. Nothing hits Odoo until you approve.

Step 4

Submit to Odoo

One command writes the draft as a real Quotation (sale.order) in your Odoo, with tax computed server-side. The cross-reference learns every customer part you assigned.

What's live, and what isn't

Live and validated

  • Read paths: products, customers, open invoices, recent quotations
  • Write paths: create / confirm / discard Quotations
  • Gmail ingestion: real OAuth, gmail.modify scope (never sends)
  • PDF + scan + plain-text PO parsing
  • Five-step match cascade against the live Odoo catalog
  • Local draft store, human-review gate, no auto-submit
  • Cross-reference flywheel — auto-learns customer SKUs on submit
  • Insights: catalog audit, pricing intelligence, customer health
  • Multi-period dashboard (HTML, offline)
  • Doctor self-check CLI (12 PASS/FAIL/WARN checks across Odoo + Gmail + stores)
  • Usage reporting to control plane (boot flush + 30-min auto-flush)
  • License system — separate Odoo tier in the control plane, admin license-mint endpoint
  • Operator productivity (Phase 7): review-queue report, price-variance check, outlier-line scan, bulk-submit-clean (env-gated), bulk-discard-drafts (dry-run default)
  • Borderless-PDF parser fallback (Phase 7.1): when pdfplumber's table extractor returns zero rows on a PO with no grid lines, the parser falls back to text-based heuristic line extraction so customer SKUs are still captured. Caught during the 10-PO live test — many real POs ship as borderless layouts.
  • propose_estimate dedup by message_id (Phase 7.1): running the same Gmail message through propose_estimate twice now returns the existing draft instead of creating a duplicate. Optional force_new=True override for the intentional case.
  • Twelve reporting tools as Claude Desktop queries (Phase 8): report_match_quality (overall + by customer), report_pos_processed, report_top_items, report_top_customers, report_time_saved, list_reports, run_odoo_report, update_odoo_product_price, refresh_catalog, set_draft_doc_discount. The data was already in the dashboard; this exposes each as a query you can ask Claude in plain English.
  • sidequest-odoo setup CLI (Phase 8): renders the Claude Desktop config JSON snippet automatically + a one-line Python invocation that wires the connector into Claude Desktop without manual JSON editing. Parity with the QBO connector's sidequest setup.
  • Money quantization (Phase 8.1): all currency round-tripping through the Odoo client is quantized to 2 decimal places on the way out, so operator-visible prices never show float noise like 4.8500000000000005. Caught by the new hermetic integration test on the first live run.
  • Hermetic Docker integration tests: 6 integration tests run against a real Odoo container booted from scratch by CI. Catches transport-level bugs (XML-RPC serialization, type coercion) that DEMO_MODE tests can't see. Runs nightly + on every PR to main; emails on failure.
  • 76 unit tests green (DEMO_MODE, ~30s) + 6 integration tests green (real Odoo, ~10 min). Phases 1-8 validated live end-to-end on Odoo 17.

Not in beta yet

  • Hard self-test across a full week of real-shaped POs (in progress — three sessions so far, every bug found has been fixed in the same session)
  • Auto-label-unprocessed Gmail batch labeling (queued as Phase 9)
  • Draft-reply-to-buyer — generate a polite Gmail reply with the Odoo Quotation number, line summary, total (queued as Phase 9)
  • Auto-submit-if-clean (QBO has this — Odoo will follow, opt-in per customer, behind the SIDEQUEST_AUTOSUBMIT env gate)
  • AR-followup sweep (QBO has this — Odoo equivalent queued)
  • OCR rescue for the hardest scans (Azure Document Intelligence)
  • Multi-attachment routing — picking the right PDF when an email has three attached
  • External-tester signoff (the release gate item)
  • Odoo App Store listing

Live proof from a real test session

Captures from a test session on June 11, 2026. Real Gmail inbox → real PDF parser → real Odoo 17 sandbox, end-to-end. Nothing posed.

Gmail inbox showing 10 purchase order emails with the purchase-orders label and PDF attachments
1. The input: 10 PO emails sitting in Gmail under the purchase-orders label. Each carries a PDF attachment. The connector reads emails labeled this way — nothing else gets touched.
Healthcare purchase order PDF — Prime Health Products, PO-664730, with line items
2a. One template: Healthcare PO PDF (PO-664730 from Prime Health Products). The parser extracted PO number, every line, quantities, prices, and totals that reconcile to the document header.
Industrial purchase order PDF — Industrial Pipe and Valve, PO-449319, with line items
2b. A different template: Industrial PO PDF (PO-449319 from Industrial Pipe & Valve). Different header (“SUPPLY ORDER” vs “PROCUREMENT REQUEST”), different layout, same clean extraction.
Odoo Inventory Products list view showing 85 products across multiple verticals
3. The catalog: Odoo Inventory → Products view. 85 products seeded across 9 verticals (MRO, Healthcare, Fasteners, Automotive, Industrial, Electrical, Bearings, Safety, Distribution). What the matcher cascade runs against.
Odoo Sales Quotations list showing 13 quotations created by SideQuest
4. The output: Odoo Sales → Quotations list. Real sale.order rows the connector wrote — draft state, awaiting operator confirmation. Tax computed by Odoo server-side, never by us.

Result: 10 PDFs parsed cleanly, 94 lines extracted with totals that reconcile to header, $223,536 in total pipeline staged as local drafts for review. Match rate jumped from 0/94 (3-product sandbox) to a working baseline once the catalog was seeded to real-shape size. The full operator queue → review → submit cycle ran against live Odoo without intervention. Full technical writeup →

Who it's for

Wholesale and industrial distributors running Odoo Community or Enterprise 16+, processing inbound customer POs by email. If your team retypes line items into sale.order forms today — plumbing, electrical, HVAC, fasteners, JanSan, MRO, foodservice, auto parts, building materials — this is the shape of problem we built for.

Architecture decisions worth knowing

The Odoo connector is the QuickBooks Online connector's twin: same five-step matcher, same draft-for-review gate, same local-first data posture. Customer data never leaves the operator's machine. We talk to Odoo over XML-RPC using a per-user API key. Tax is computed by Odoo server-side, never by us. The whole thing runs as a Claude Desktop MCP connector — no SaaS dashboard to log into, no cloud database holding your PO contents.

The shared core is vendored at lockstep with the QBO connector so behavior stays consistent. When we fix a parser bug for QuickBooks, Odoo gets it too. The vendoring ledger is part of the repo for anyone who wants to audit drift.

Pricing (intent)

Free during beta. At launch, pricing will mirror our QuickBooks Online connector tiers: 25 POs/month free, then Solo ($29), Growth ($99), or Scale ($299) based on monthly PO volume. Above 3,500 POs/month is custom. No price change for QBO customers — we're matching, not raising.

Join the Odoo beta waitlist

One external tester is going first; you'd be in the next batch. Email us and tell us what you sell, how many POs/month you handle, and which Odoo version you're on.

Email hello@sidequestautomation.com →

Honest read: why beta, why now

The connector works. We've run real POs from a real Gmail account through it into a real Odoo sandbox, end-to-end, and watched it learn cross-references over multiple sessions. What we haven't done yet is put it in front of an outside operator and watch them break it — that's the next step. Our release gate requires both an external tester signoff and our own before anything goes public. We're not skipping that step to chase a launch date.

SideQuest Automation · sidequestautomation.com
Questions? Send a brief