Skip to main content

Looker Studio Connector

This is the installation and configuration guide for Looker Studio Connector, the module you downloaded from your ECOSIRE dashboard or the Odoo Apps Store. Everything on this page describes the ecosire_looker_studio_connector module exactly as it ships today.

Technical nameecosire_looker_studio_connector
Odoo versions17.0, 18.0, 19.0 (Community or Enterprise)
Current shipped version17.0 → 17.0.1.0.1, 18.0 → 18.0.1.0.1, 19.0 → 19.0.1.0.2
Price$499 USD, one-time, per Odoo version
Odoo module licenceOPL-1
CategoryProductivity / Reporting
What changed in 19.0.1.0.2

No licence activation. The module no longer depends on a separate ECOSIRE licence module, and nothing has to be activated: Auto-map Fields and Generate / Regenerate Token work as soon as the module is installed. Licensing is contractual under OPL-1. The 17.0.1.0.1 and 18.0.1.0.1 builds ship the same way.

What it does​

The module is the Odoo side of a Google Looker Studio data source. It lets you decide exactly which Odoo data may be reported on, and exposes that data, read-only, to a Looker Studio Community Connector.

  • Datasets. A dataset is one Odoo model (for example Sales Orders, Invoices, CRM leads, POS orders, stock moves or purchase orders), the fields you choose to expose, and an optional base filter that is always applied.
  • Reporting tokens. Each token runs as one Odoo user. Every read is performed as that user, so the user's access rights, record rules and company restrictions apply to every row Looker Studio receives.
  • Read-only bridge. Four HTTPS endpoints under /looker_studio/ answer the connector. They only ever search and read; they never create, change or delete Odoo records. Data flows from Odoo to Looker Studio only.
The Looker Studio side

Looker Studio reads this data through a Community Connector, a Google Apps Script project. The connector script is not part of the Odoo download. It calls the four endpoints described under Connector reference. For help connecting a Looker Studio report, email info@ecosire.com.

Requirements​

  • Odoo 17.0, 18.0 or 19.0, Community or Enterprise.
  • The module depends only on base and web. The models you expose (sales, invoicing, CRM, POS, inventory, purchase) must of course be installed for their datasets to have data.
  • Your Odoo must be reachable over HTTPS from Google's servers, because the connector fetches the data from your Odoo URL.

Installation​

  1. Install ECOSIRE Looker Studio Connector from Apps in your Odoo database.
  2. Give the right people access (next section). The Looker Studio app appears in the main menu for users in one of its groups.

Access levels​

Two groups ship with the module, under Settings → Users & Companies → Users:

GroupCan do
Looker Studio / UserSee the datasets, and create, regenerate and revoke their own reporting tokens.
Looker Studio / ManagerEverything a user can do, plus create and edit datasets and manage every user's tokens.

All three records (datasets, dataset fields, tokens) carry a company and are isolated per company in a multi-company database.

Configure a dataset​

Go to Looker Studio → Datasets and create a dataset (Manager):

FieldMeaning
Dataset NameThe label shown in the Looker Studio connector's dataset list, e.g. Sales Orders.
Dataset KeyThe stable identifier the connector sends, lowercase with no spaces, e.g. sales_orders. Unique per company.
Odoo ModelThe model to expose, e.g. sale.order.
Base DomainAn Odoo domain always applied to every read, e.g. [('state', '=', 'sale')]. It must be a valid list, or the dataset cannot be saved.
Max Rows Per CallRows returned per request (default 10,000; never more than 50,000). The connector pages through larger results.
ActiveInactive datasets are not offered to Looker Studio.

Then fill the Exposed Fields tab. Click Auto-map Fields to add every stored field of the model (binary, one-to-many and many-to-many fields are skipped), then delete the rows you do not want to share and reorder the rest. Only the fields listed here can ever be returned; a dataset with no exposed fields returns nothing.

Each row maps one Odoo field to a Looker Studio field:

ColumnMeaning
Odoo FieldThe technical field name on the model.
Looker Field NameThe name Looker Studio uses. Unique within the dataset.
LabelThe display name in Looker Studio.
Data Type / ConceptSTRING, NUMBER or BOOLEAN; DIMENSION or METRIC.
Semantic TypeOptional; set automatically for dates.

Auto-map applies these types:

Odoo field typeLooker Studio typeValue sent
Integer, Float, MonetaryNUMBER metricThe number
Char, Text, HTML, Selection, ReferenceSTRING dimensionThe text (selection fields send the stored key)
Many2oneSTRING dimensionThe linked record's display name
BooleanBOOLEAN dimensiontrue; a false value arrives empty
DateSTRING dimension, YEAR_MONTH_DAYYYYYMMDD
DatetimeSTRING dimension, YEAR_MONTH_DAY_SECONDYYYYMMDDHHMMSS

Issue a reporting token​

Go to Looker Studio → Reporting Tokens and create a token:

  1. Enter a Token Label (e.g. Finance Dashboard) and choose the Run As User. The token sees exactly what that user sees in Odoo, so pick a user with the access the report needs and no more.
  2. Optionally set an Expiration Date; after it the token stops working.
  3. Optionally list Allowed Datasets. Leave it empty to allow every dataset the run-as user can see.
  4. Click Generate / Regenerate Token. The token (it starts with lkr_) is shown once in a notification. Copy it now: Odoo stores only a hash of it and cannot show it again. The form keeps the first characters as Token Hint so you can recognise it.

Regenerating replaces the token, so any report using the old one stops refreshing until you paste the new one. Revoke deactivates the token. Last Used shows when it last called Odoo.

Connector reference​

The connector authenticates every request with the reporting token in either header:

Authorization: Bearer lkr_xxxxxxxxxxxxxxxx
X-Api-Key: lkr_xxxxxxxxxxxxxxxx
EndpointConnector functionReturns
GET /looker_studio/pingisAuthValidok, the run-as user's login, the company and the bridge version
GET /looker_studio/datasetsgetConfigThe datasets the token may use: key, name, model, description
GET /looker_studio/schema?dataset=<key>getSchemaThe dataset's exposed fields with name, label, data type, concept and semantic type
POST /looker_studio/datagetDataRows for the requested fields, with paging

Body of POST /looker_studio/data:

{
"dataset": "sales_orders",
"fields": ["name", "amount_total", "date_order"],
"date_field": "date_order",
"date_range": { "start": "2026-01-01", "end": "2026-12-31" },
"filters": [ { "field": "state", "op": "=", "value": "sale" } ],
"offset": 0,
"limit": 10000
}
  • fields may name only exposed fields; others are ignored. Omit it to get every exposed field.
  • date_field and every filter field must also be exposed fields. Filter operators allowed: =, !=, >, >=, <, <=, in, not in, like, ilike, =like, =ilike.
  • The response is { "schema": [...], "rows": [{ "values": [...] }], "total": N, "offset": N, "limit": N }. Keep requesting with a higher offset until offset + limit reaches total.

Responses:

StatusMeaning
200Success
400The body is not a JSON object, or none of the requested fields is exposed
401Missing, unknown, revoked or expired token, or the run-as user is archived
403The dataset does not exist, is inactive, is not visible to the run-as user, or is not in the token's Allowed Datasets
429More than 60 requests per minute on this token

Security model​

  • Tokens are stored only as a SHA-256 hash and are never written to the Odoo log.
  • Every read runs as the token's user, so access rights, record rules and multi-company isolation apply.
  • Only exposed fields can be read, filtered or returned; caller filters are checked against a fixed operator list and never evaluated as raw code.
  • The dataset's Base Domain is always applied on top of any caller filter.
  • No endpoint can create, modify or delete Odoo data.

Troubleshooting​

SymptomFix
Connector says the credentials are invalidCheck the token was copied completely, is active and has not expired, and that the run-as user is not archived. Regenerate it if in doubt.
A dataset is missing from the listMake sure it is Active, belongs to the run-as user's company, and is in the token's Allowed Datasets (or that list is empty).
Fewer rows than expectedThe Base Domain, the run-as user's record rules and company access all restrict rows. Check them in Odoo as that user.
A column is missingAdd the field to the dataset's Exposed Fields and refresh the data source fields in Looker Studio.
Errors with status 429The report sends more than 60 requests per minute on one token. Raise Max Rows Per Call so fewer pages are needed, or use separate tokens per report.

Support​

Email info@ecosire.com with your Odoo version, the module version shown in Apps, and what you see.