# Huwise

> Read open data from any Huwise (formerly Opendatasoft) portal: search a portal's datasets, read and group records, and export a dataset as a CSV, Excel, JSON or GeoJSON file.

App · 8 actions. Web page: https://docs.lodol.com/docs/integrations/opendatasoft

## Actions

### Export a dataset

Export a dataset's records, all or filtered, as a CSV, Excel, JSON or GeoJSON file saved in Lodol, or as the portal's download link. Files over 50 MB need the link.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.
- Format (`file_format`, text): The file format. One of: `csv` (CSV spreadsheet), `xlsx` (Excel workbook (.xlsx)), `json`, `geojson` (GeoJSON (for maps)). Default: `csv`.
- Deliver as (`delivery`, text): A file saved in Lodol for later steps to attach or read, or only the portal's download link. One of: `file` (Save as a file), `link` (Download link only). Default: `file`.
- Columns (`columns`, list): The fields to return. Leave empty for all.
- Exact matches (`refine`, object): Only records whose field holds exactly this value, such as country_code = FR.
- Filter (`where`, text): Only records meeting this condition, written in ODSQL with field names, such as population > 100000 AND country_code = 'FR'.
- Search words (`query`, text): Only records containing these words in any text field.
- Rows (`limit`, number): The most records to export. Leave empty for all. From 1 to 10000000.

**Outputs**

- `content_type` (text): The saved file's media type.
- `dataset_id` (text): The dataset that was exported.
- `document_ref` (text): The saved file, when saved as a file.
- `documents` (list): The saved file, when saved as a file; empty for a link.
- `export_url` (text): A public link that downloads the same export from the portal, fresh each time it is opened.
- `filename` (text): The file's name.
- `format` (text): The file format: csv, xlsx, json or geojson.
- `size_bytes` (number): The saved file's size in bytes.
- `url` (text): Where Lodol serves the saved file.

**Example output**

```json
{
  "content_type": "text/csv",
  "dataset_id": "geonames-all-cities-with-a-population-1000",
  "document_ref": "doc_3f2a9c1e5b7d4e6f8a0b1c2d3e4f5a6b",
  "documents": [
    {
      "content_type": "text/csv",
      "document_ref": "doc_3f2a9c1e5b7d4e6f8a0b1c2d3e4f5a6b",
      "filename": "geonames-all-cities-with-a-population-1000.csv",
      "size_bytes": 139,
      "url": "/actions/core/serve-document/doc_3f2a9c1e5b7d4e6f8a0b1c2d3e4f5a6b"
    }
  ],
  "export_url": "https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/geonames-all-cities-with-a-population-1000/exports/csv?select=name%2C+population&refine=country_code%3A%22FR%22&limit=3&delimiter=%2C",
  "filename": "geonames-all-cities-with-a-population-1000.csv",
  "format": "csv",
  "size_bytes": 139,
  "url": "/actions/core/serve-document/doc_3f2a9c1e5b7d4e6f8a0b1c2d3e4f5a6b"
}
```

### Get a dataset

Get a dataset's details: its publisher, licence, record count and fields.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.

**Outputs**

- `api_url` (text): The address its records can be read from.
- `attachments` (list): Documents attached to it.
- `data_processed_at` (text): When its data was last processed (ISO 8601).
- `description` (text): The dataset's description, which may contain HTML.
- `features` (list): What it supports, such as geo (has locations) or timeserie (has dates).
- `fields` (list): Its fields.
- `has_records` (true/false): True when it holds records, rather than only files.
- `id` (text): The dataset's id. Use it in the Dataset field.
- `keywords` (list): Its keywords.
- `language` (text): The language of its metadata, such as en or fr.
- `license` (text): The licence the data is published under.
- `license_url` (text): A link to the licence.
- `page_url` (text): The dataset's page on the portal.
- `portal` (text): The portal it is on.
- `publisher` (text): Who publishes it.
- `records_count` (number): How many records it holds.
- `themes` (list): The portal's themes for it.
- `title` (text): The dataset's title.
- `updated_at` (text): When it was last modified (ISO 8601).

**Example output**

```json
{
  "api_url": "https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/geonames-all-cities-with-a-population-1000/records",
  "attachments": [],
  "data_processed_at": "2026-10-10T06:05:41+00:00",
  "description": "<p>All cities with a population &gt; 1000 or seats of adm div (ca 80.000)</p>",
  "features": [
    "timeserie",
    "geo",
    "analyze"
  ],
  "fields": [
    {
      "description": null,
      "label": "Geoname ID",
      "name": "geoname_id",
      "type": "text"
    },
    {
      "description": null,
      "label": "Name",
      "name": "name",
      "type": "text"
    },
    {
      "description": null,
      "label": "Population",
      "name": "population",
      "type": "int"
    }
  ],
  "has_records": true,
  "id": "geonames-all-cities-with-a-population-1000",
  "keywords": [
    "Geonames",
    "city",
    "world"
  ],
  "language": "en",
  "license": "CC BY 4.0",
  "license_url": "https://creativecommons.org/licenses/by/4.0/",
  "page_url": "https://public.opendatasoft.com/explore/dataset/geonames-all-cities-with-a-population-1000/",
  "portal": "public.opendatasoft.com",
  "publisher": "GeoNames",
  "records_count": 171176,
  "themes": [
    "Administration"
  ],
  "title": "Geonames - All Cities with a population > 1000",
  "updated_at": "2026-10-10T06:05:41+00:00"
}
```

### Get a record

Get one record of a dataset by its record id.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.
- Record id (`record_id`, text, required): The record's id, the record_id that Get records returns.

**Outputs**

- `dataset_id` (text): The dataset the record is in.
- `record` (object): The record's fields, keyed by field name.
- `record_id` (text): The record's id.

**Example output**

```json
{
  "dataset_id": "geonames-all-cities-with-a-population-1000",
  "record": {
    "coordinates": {
      "lat": 48.85341,
      "lon": 2.3488
    },
    "cou_name_en": "France",
    "country_code": "FR",
    "geoname_id": "2988507",
    "name": "Paris",
    "population": 2138551,
    "timezone": "Europe/Paris"
  },
  "record_id": "b72cc32723d4e39b36742aa65427bb825ae71939"
}
```

### Get records

Read a dataset's records: choose fields, filter, search, group and count, sort and page through them, up to 100 at a time.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.
- Columns (`columns`, list): The fields to return. Leave empty for all.
- Exact matches (`refine`, object): Only records whose field holds exactly this value, such as country_code = FR.
- Filter (`where`, text): Only records meeting this condition, written in ODSQL with field names, such as population > 100000 AND country_code = 'FR'.
- Search words (`query`, text): Only records containing these words in any text field.
- Group by (`group_by`, text): Count records for each value of this field, such as records per country. Leave Columns empty to get each value with its count.
- Sort by field (`sort_column`, text): The field to sort by.
- Sort direction (`sort_direction`, text): Which way to sort. One of: `asc` (Ascending (A to Z, oldest or smallest first)), `desc` (Descending (Z to A, newest or largest first)). Default: `asc`.
- Results (`limit`, number): How many records to return. From 1 to 100. Default: `20`.
- Skip (`offset`, number): How many to skip first, to page through them. Skip plus Results can be at most 10,000. From 0 to 9999. Default: `0`.

**Outputs**

- `count` (number): How many records are on this page.
- `dataset_id` (text): The dataset the records came from.
- `has_more` (true/false): True when more records follow; raise Skip to see them.
- `records` (list): The records, each keyed by field name, with its record_id first (not when grouped). A grouped query gives each group and its count.
- `total_count` (number): How many records match in all (or, when grouped, how many groups).

**Example output**

```json
{
  "count": 1,
  "dataset_id": "geonames-all-cities-with-a-population-1000",
  "has_more": false,
  "records": [
    {
      "country_code": "FR",
      "name": "Paris",
      "population": 2138551,
      "record_id": "b72cc32723d4e39b36742aa65427bb825ae71939"
    }
  ],
  "total_count": 1
}
```

### List a dataset's facets

List the values a dataset's facet fields hold, with how many records hold each, optionally among records meeting a filter.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.
- Filter (`where`, text): Only records meeting this condition, written in ODSQL with field names, such as population > 100000 AND country_code = 'FR'.

**Outputs**

- `count` (number): How many facets there are.
- `dataset_id` (text): The dataset.
- `facets` (list): Each facet field of the dataset and its values.

**Example output**

```json
{
  "count": 2,
  "dataset_id": "geonames-all-cities-with-a-population-1000",
  "facets": [
    {
      "name": "timezone",
      "values": [
        {
          "count": 8941,
          "value": "Europe"
        }
      ]
    },
    {
      "name": "feature_code",
      "values": [
        {
          "count": 8424,
          "value": "PPL"
        },
        {
          "count": 231,
          "value": "PPLA3"
        }
      ]
    }
  ]
}
```

### List attachments

List the documents attached to a dataset, such as its data dictionary, with download links.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Dataset (`dataset`, text, required): Pick a dataset, or enter its id, or paste a link to its page. The list shows the portal's most recently updated datasets.

**Outputs**

- `attachments` (list): The documents attached to it.
- `count` (number): How many there are.
- `dataset_id` (text): The dataset.

**Example output**

```json
{
  "attachments": [
    {
      "id": "_base_carbone_documentation_generale_v11_pdf",
      "mimetype": "application/pdf",
      "title": "[Base Carbone] Documentation g\u00e9n\u00e9rale v11.pdf",
      "url": "https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/base-carbone/attachments/_base_carbone_documentation_generale_v11_pdf"
    }
  ],
  "count": 1,
  "dataset_id": "base-carbone"
}
```

### List catalog facets

List the values a portal's datasets can be narrowed by, such as its themes, publishers and keywords, with counts.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.

**Outputs**

- `count` (number): How many facets there are.
- `facets` (list): Each facet of the catalogue and its values.

**Example output**

```json
{
  "count": 2,
  "facets": [
    {
      "name": "theme",
      "values": [
        {
          "count": 140,
          "value": "Geography"
        },
        {
          "count": 112,
          "value": "Territory"
        },
        {
          "count": 70,
          "value": "Administration"
        }
      ]
    },
    {
      "name": "publisher",
      "values": [
        {
          "count": 93,
          "value": "Opendatasoft"
        },
        {
          "count": 78,
          "value": "Huwise"
        },
        {
          "count": 55,
          "value": "INSEE"
        }
      ]
    }
  ]
}
```

### Search datasets

Find datasets on a portal by words, theme, publisher or keyword.

**Inputs**

- Portal (`portal`, text, required): The portal's web address, such as public.opendatasoft.com. A link to any page on the portal works too.
- Search words (`query`, text): Words to look for in titles, descriptions and keywords. Leave empty to list every dataset.
- Theme (`theme`, text): Only datasets with this theme.
- Publisher (`publisher`, text): Only datasets from this publisher.
- Keyword (`keyword`, text): Only datasets with this keyword.
- Filter (`where`, text): Only datasets meeting this ODSQL condition on their details, such as records_count > 1000.
- Sort by (`order`, text): The order to return datasets in. One of: `default` (Portal's default), `recently_modified` (Recently updated), `title` (Title A to Z), `most_records` (Most records). Default: `default`.
- Results (`limit`, number): How many datasets to return. From 1 to 100. Default: `10`.
- Skip (`offset`, number): How many to skip first, to page through them. Skip plus Results can be at most 10,000. From 0 to 9999. Default: `0`.

**Outputs**

- `count` (number): How many datasets match in all, beyond this page.
- `datasets` (list): The matching datasets on this page.
- `has_more` (true/false): True when more matches follow; raise Skip to see them.

**Example output**

```json
{
  "count": 1,
  "datasets": [
    {
      "api_url": "https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/geonames-all-cities-with-a-population-1000/records",
      "attachments": [],
      "data_processed_at": "2026-10-10T06:05:41+00:00",
      "description": "<p>All cities with a population &gt; 1000 or seats of adm div (ca 80.000)</p>",
      "features": [
        "timeserie",
        "geo",
        "analyze"
      ],
      "fields": [
        {
          "description": null,
          "label": "Geoname ID",
          "name": "geoname_id",
          "type": "text"
        },
        {
          "description": null,
          "label": "Name",
          "name": "name",
          "type": "text"
        },
        {
          "description": null,
          "label": "Population",
          "name": "population",
          "type": "int"
        }
      ],
      "has_records": true,
      "id": "geonames-all-cities-with-a-population-1000",
      "keywords": [
        "Geonames",
        "city",
        "world"
      ],
      "language": "en",
      "license": "CC BY 4.0",
      "license_url": "https://creativecommons.org/licenses/by/4.0/",
      "page_url": "https://public.opendatasoft.com/explore/dataset/geonames-all-cities-with-a-population-1000/",
      "portal": "public.opendatasoft.com",
      "publisher": "GeoNames",
      "records_count": 171176,
      "themes": [
        "Administration"
      ],
      "title": "Geonames - All Cities with a population > 1000",
      "updated_at": "2026-10-10T06:05:41+00:00"
    }
  ],
  "has_more": false
}
```
