$ 196.22
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
CRM (crm)
• Contacts (contacts) • Calendar (calendar) • Discuss (mail) |
| Lines of code | 2504 |
| Technical Name |
eb_looker_connector |
| License | OPL-1 |
| Website | https://www.echobitzit.com |
| Versions | 15.0 16.0 17.0 18.0 19.0 |
Odoo Looker
Studio
Connector
Odoo Looker Studio Connector bridges your Odoo instance directly with Google Looker Studio - no CSV exports, no middleware, no manual data pipelines. Connect any Odoo model and build live business dashboards with token-based authentication, custom field selection, domain filtering, pagination, real-time request logging, and full Odoo security respected at every layer.
Why Teams Choose Looker Studio Connector
Business Value It Delivers
crm.lead
and sale.order to account.move,
hr.employee, stock.quant, and any custom model - a
single installation unlocks your entire Odoo database as a Looker Studio data
source, with no extra configuration per module.
Connect Odoo to Looker Studio in Minutes
Generate a secure API token inside Odoo, configure which models and fields to expose, then paste your connector URL into Google Looker Studio. Your live Odoo data will be available as a data source instantly - no coding required.
What is Odoo Looker Studio Connector?
Odoo Looker Studio Connector is a native Odoo 19 module that exposes your Odoo
data through a secure REST API at /looker/api/, enabling
Google Looker Studio to connect directly to any Odoo model as a live data source.
No middleware, no third-party services, no data exports - just a clean, token-authenticated
connection between your ERP and your dashboards.
It is also the control layer for what data gets shared. Per-model configurations, field-level toggles, visual domain builders, max-record caps, and per-token model restrictions give admins full visibility and governance over exactly what Looker Studio can see - while a built-in request log tracks every API call with timing, record count, and IP address.
/looker/api/ with Bearer token auth, CORS support, and full JSON responses.
Key Features
Everything you need to connect Odoo data to Google Looker Studio securely
API tokens are generated using Python's secrets.token_urlsafe(48) and stored
as SHA-256 hashes - the raw token is never persisted after first display. Each token is
linked to a specific Odoo user, so all data fetched respects that user's access rights.
Tokens support optional expiry dates and are auto-deactivated by a daily cron job.
Authorization:
Bearer, custom X-Looker-Token header, or
?token= query param - all supported seamlessly.
403 Forbidden response.
Configure each Odoo model independently: set a visual domain filter, choose a max-record cap (default 75,000), and see a live record-count preview - all from one Odoo form.
Toggle individual fields on/off, rename display labels, override Looker data types (TEXT, NUMBER, BOOLEAN, Date, Currency, Percent) and set each as DIMENSION or METRIC.
All Odoo field types map
automatically to Looker Studio types - monetary → NUMBER METRIC,
date → YEAR_MONTH_DAY, many2one → TEXT label - with no manual
setup required.
Complete API coverage:
/info, /validate, /models, /schema,
/data, /fields, /search, /count, plus
CORS OPTIONS preflight for browser-based Looker connectors.
limit/offset with
a has_more flag supports large datasets up to 75,000 records.
/search endpoint supports group_by via Odoo's
read_group, enabling aggregated metrics and grouped analytics directly in
Looker Studio.
Access-Control-Allow-Origin:
* headers on every response plus dedicated OPTIONS preflight
handlers ensure compatibility with Looker Studio's browser-based community connector.
many2one
values become label strings, many2many becomes count, dates become ISO
8601, and False becomes null - all data is Looker Studio ready
out of the box.
Connect Looker Studio to Odoo
Follow these steps to set up your first live Odoo data source in Google Looker Studio.
- Go to Looker Studio → API Tokens in Odoo
- Click New and give your token a name
- Select the Odoo user whose access rights will apply
- Optionally set an Expiry Date and restrict to specific models
- Click Generate Token - copy the token immediately
- Note your Connector URL shown on the token form:
https://your-odoo.com/looker/api
- Go to Looker Studio → Model Configurations
- Click New and select your token and Odoo model (e.g.
crm.lead) - Use the Domain Builder to filter which records are exposed
- Set a Max Records cap (default 75,000)
- Click Sync Fields to import all available fields
- Toggle fields on/off, rename labels, and set DIMENSION or METRIC per field
- Send a quick GET request to verify the connection:
GET /looker/api/validate- Pass your token as
Authorization: Bearer <token> - A successful response returns
"valid": truewith user name and token name - Or browse to
/looker/api/infoto confirm the API is reachable - no auth required
- Open Google Looker Studio → Create → Data Source
- Search for and select the Odoo Looker Studio Connector
- Enter your Connector URL:
https://your-odoo.com/looker/api - Paste your API Token in the token field
- Select your Odoo Model from the dropdown
- Click Connect - your live Odoo fields appear ready to chart
You can send a filter domain directly from Looker Studio alongside the model request. Use the Domain JSON field from your model config - it is already formatted in the correct JSON array structure.
domain=[["stage_id.name","=","Won"]]
limit=5000&offset=0&order=date_deadline asc
If your Odoo instance is running locally (port 8069), expose it over HTTPS so Looker Studio can reach it:
ngrok http 8069
Set the ngrok URL as web.base.url in Odoo System Parameters, and set web.base.url.freeze to True to prevent Odoo from overriding it.
How It Works
From installation to live Looker Studio dashboards in four simple steps
Install the app in your Odoo 19 instance - no middleware, no external service required.
Create a secure API token, select which Odoo models and fields to expose, and apply domain filters.
Paste your connector URL and token into the Looker Studio Community Connector - your Odoo fields are ready instantly.
Drag & drop fields into charts, tables, and scorecards in Looker Studio - all powered by live Odoo data.
Feature Deep Dive
Explore every capability of the Odoo Looker Studio Connector in detail
Prerequisites
ngrok
http 8069.
Install the Module
- Go to Odoo → Apps and search for Looker Studio Connector
- Click Install - no dependencies, no pip packages needed
- After installation, a new menu Looker Studio appears in the main Odoo menu bar
- The menu contains: API Tokens, Model Configurations, and Request Logs
Generate an API Token
- Go to Looker Studio → API Tokens
- Click New and give the token a name (e.g. Sales Dashboard Token)
- Select the Odoo User whose access rights will apply to all queries
- Optionally set an Expiry Date
- Optionally restrict the token to specific Allowed Models
- Click Generate Token - copy the token immediately (shown only once)
- Note the Connector URL displayed on the form
/looker/apiConfigure a Model
- Go to Looker Studio → Model Configurations and click New
- Select the Token this config will be linked to
- Select the Odoo Model you want to expose (e.g.
crm.lead,sale.order) - Use the Domain Builder to add filters - e.g. only won opportunities, only confirmed orders
- Set the Max Records cap (default: 75,000 - the Looker Studio connector limit)
- Check the Record Count field to preview how many records match your domain
- Click Save - one active config per model is enforced by a database constraint
Configure Fields
- Open your Model Configuration record
- Click Sync Fields - all Odoo fields for the model are imported automatically
- In the Field Configuration tab, toggle the Selected checkbox to include/exclude fields
- Edit Display Label to rename fields for business users
- Override Looker Data Type: TEXT, NUMBER, BOOLEAN, Date, DateTime, Percent, Currency
- Set Concept Type to DIMENSION or METRIC for each field
- Only Selected fields appear in Looker Studio schema & data responses
char, text → TEXT DIMENSION
integer, float → NUMBER
METRIC
monetary → NUMBER METRICboolean → BOOLEAN DIMENSIONdate → YEAR_MONTH_DAY DIMENSIONdatetime → YEAR_MONTH_DAY_HOUR DIMENSION
many2one → TEXT (label) DIMENSIONselection → TEXT DIMENSIONmany2many → NUMBER (count) METRICConnect from Google Looker Studio
- Open Google Looker Studio → Create → Data Source
- Search for and select the Odoo Looker Studio Connector
- Enter your Connector URL:
https://your-odoo.com/looker/api - Paste your API Token in the token field
- Select the Odoo Model from the dropdown (models accessible by your token)
- Click Connect - your configured fields appear as Looker Studio dimensions & metrics
- Click Create Report and start building charts, tables, and scorecards
Validate & Test Your Setup
GET /looker/api/validate
Authorization: Bearer <your-token>
{"valid":
true, "user": "...", "token": "..."}ngrok
http 8069
web.base.url in Odoo System
Parameters.Set
web.base.url.freeze = True to prevent Odoo from overriding
it.
Configuration Screenshots
Token-Based Authentication
Each API token is generated
using Python's secrets.token_urlsafe(48) — a 64-character, URL-safe,
cryptographically secure token. Only a SHA-256 hash is stored in the
database. The raw value is displayed only once and never stored in plaintext.
Authorization: Bearer <token>X-Looker-Token: <token>?token=<token>query param
- Optional Expiry Date
- Daily cron auto-deactivates expired tokens
- Manual Revoke & Refresh buttons
- Tracks Last Used & Total Requests
Each token can be restricted to a whitelist of
Odoo models via the Allowed Models field. Requests to
unauthorised models return 403 Forbidden. Tokens with no
restriction allow access to all models the linked user can read.
How Authentication Works
- Looker Studio sends a request to
/looker/api/data/<model> - Token extracted from header or query param
- Token is SHA-256 hashed and looked up in the database
- If valid and not expired, authentication passes
last_usedandrequest_countupdated automatically- All ORM queries run as
env(user=token.user_id)— Odoo record rules apply - Every call is written to the Request Audit Log
GET /looker/api/validate
Authorization: Bearer <your-token>
{ "valid": true, "user": "Admin", "token_name": "My Token" }
Per-Model Configuration
Each Odoo model you want to expose gets its own Model Config record. A database constraint enforces one active config per model — onchange warnings appear immediately on duplicates.
- Select any non-transient Odoo Model
- Tie config to a specific Token
- Set Max Records cap (default 75,000)
- Visual Domain Builder for record filtering
- Live Matching Record Count preview
The Domain JSON computed field auto-converts Odoo's internal tuple format to clean JSON — copy directly into Looker Studio.
[["state","=","sale"],
["date_order",">","2024-01-01"]]
Domain Merging
Config domain and runtime Looker Studio
filter domain are merged together. Both enforced on every search_read. The
parser handles JSON strings, Python literal strings, or already-parsed Python lists.
crm.lead
sale.order
account.move
stock.quant
hr.employee
purchase.order
product.template
Per-Field Configuration
Click Sync Fields on any model config to auto-import every field from that Odoo model. Each field becomes a configurable row — toggle, rename, or retype before Looker Studio sees it.
- Selected toggle — include or exclude from API response
- Display Label — rename to business-friendly names
- Looker Data Type — override auto-mapped type: TEXT, NUMBER, BOOLEAN, Date, DateTime, Percent, Currency
- Concept Type — DIMENSION (grouping) or METRIC (aggregation)
- Description — shown in Looker Studio field picker
Automatic Type Mapping
Odoo field types are automatically mapped to Looker Studio equivalents on sync. Override any individually.
| Odoo Type | Looker Type | Concept |
|---|---|---|
char, text |
TEXT | DIMENSION |
integer, float |
NUMBER | METRIC |
monetary |
NUMBER | METRIC |
boolean |
BOOLEAN | DIMENSION |
date |
YEAR_MONTH_DAY | DIMENSION |
datetime |
YEAR_MONTH_DAY_HOUR | DIMENSION |
many2one |
TEXT (label) | DIMENSION |
selection |
TEXT | DIMENSION |
many2many |
NUMBER (count) | METRIC |
REST API Endpoints
| Endpoint | Purpose |
|---|---|
/looker/api/info |
Version & status (public) |
/looker/api/validate |
Verify token validity |
/looker/api/models |
List accessible models |
/looker/api/schema/<model> |
Field schema for Looker |
/looker/api/data/<model> |
Fetch paginated records |
/looker/api/fields/<model> |
Raw Odoo field metadata |
/looker/api/search |
Advanced search + group_by |
/looker/api/count/<model> |
Count records by domain |
OPTIONS * |
CORS preflight handler |
Data Endpoint Parameters & Response
fields— comma-separated field namesdomain— JSON filter domainlimit— max records (cap: 75,000)offset— pagination offsetorder— e.g.date_order desc
{
"records": [...],
"count": 500,
"total": 4830,
"has_more": true,
"duration_ms": 143
}
many2onetuples → label stringmany2manylists → item count
date/datetime→ ISO 8601False(non-bool) →null
Request Audit Log
Every API call is automatically logged. Browse the full history from Looker Studio → Request Logs.
| Fields Captured per Request | |
|---|---|
| Endpoint | /looker/api/data/crm.lead |
| HTTP Method | GET or POST |
| Token | Linked record |
| Odoo User | Token owner |
| Model | Target model name |
| Response Code | 200 / 401 / 403 / 500 |
| Records Returned | Exact count |
| Duration (ms) | Full response time |
| IP Address | Caller's remote IP |
| Error Message | Captured on 500 errors |
- Cleanup Expired Tokens — daily, deactivates expired tokens
- Cleanup Old Logs — daily, purges logs older than 30 days
Frequently Asked Questions
crm.lead, sale.order, account.move,
hr.employee, stock.quant, and any custom model your
business has built.
env(user=token.user_id) — Odoo's own record
rules,
field-level access, and model access control apply. Only a SHA-256 hash is stored;
the raw token is never saved.
limit and offset
for pagination on larger datasets.
ngrok http 8069. Set the URL as web.base.url
in Odoo System Parameters and freeze it with web.base.url.freeze = True.
crm.lead, Finance gets
account.move — fully isolated.
json, ast, hashlib, secrets).
No pip packages, no external services, no third-party API keys required.
All API Endpoints at a Glance
Everything the Odoo Looker Studio Connector exposes - grouped for quick reference
dataType, conceptType, label per fieldfields, domain, limit, offset,
orderrecords, total, has_more,
duration_msread_group for aggregated metricsOPTIONS preflightBook a Demo or Watch Odoo Looker Studio Connector in Action
Schedule a walkthrough with our team or explore the product video playlist.
Scan and Connect with echoBitz
Book a meeting, start a WhatsApp conversation, or reach us by email from one simple visual card. It is the fastest way to move from curiosity to a real MCP Studio discussion.
Our Services
Odoo Integration
Seamlessly integrate Odoo with third-party apps, platforms, and tools for better workflow.
Odoo Implementation
We plan, configure, and deploy Odoo tailored to your business processes.
Customization
Get modules and workflows customized to meet your exact needs in Odoo.
Community Apps
Access or develop robust community apps to enhance your Odoo functionality.
Development Outsourcing
Hire dedicated Odoo developers to build solutions efficiently and cost-effectively.
Support & Maintenance
Enjoy peace of mind with our reliable support, updates, and bug fixing services.
Discover More Solutions by echoBitz IT
Explore our other Odoo integration apps
Ready to connect your Odoo data to Google Looker Studio?
Install the Odoo Looker Studio Connector, generate your first secure API token, and start building live dashboards from your Odoo data in minutes - no middleware, no exports, no code required.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module