# Changelog of EU Import Data API (`sourcing-data-studio/eu-import-data-api`) Actor

- **URL**: https://apify.com/sourcing-data-studio/eu-import-data-api/changelog.md
- **Full Actor documentation**: https://apify.com/sourcing-data-studio/eu-import-data-api.md

## Changelog

### 0.1.7 (2026-10-10)

- The Actor now checks the security certificate of the source. If a certificate does not verify, the request fails. Before, the check was skipped, because the crawler library skips it unless it is told not to. ec.europa.eu passed this check on 2026-10-10 from the development machine, and from Apify's servers in the runs of the EU Safety Gate API of this studio, which reads the same address. The default is no proxy. With Apify Proxy the check stays on unless the proxy reports that it decrypts traffic, and on 2026-10-10 it did not report that.
- No change to the input or the output.

### 0.1.6 (2026-10-09)

- README: the Python example now works with version 3 of Apify's Python client, the version `pip install apify-client` installs today (it needs Python 3.11 or later). The example read the dataset id as `run["defaultDatasetId"]`. Client 3 returns a typed object, so that line stopped with `TypeError: 'Run' object is not subscriptable`, after the run had finished and been charged. It now reads `run.default_dataset_id`, and the line above it says `pip install "apify-client>=3"`.
- The faulty example was added on 2026-10-09 and had not been run before it was published. The corrected one was run against this Actor the same day with client 3.3.0. The JavaScript example was run the same day and is unchanged.
- No change to the code, the input or the output.

### 0.1.5 (2026-10-09)

- README: the opening now states the price: what one saved row costs on the Free tier and what a typical query costs, from the same figures as the cost section. The sentence above the sample rows no longer names a "quick-test example".
- No source change.

### 0.1.4 (2026-10-09)

- README: the output example now comes right after the feature list; the API section shows a curl, a JavaScript and a Python example; the cost section adds the price of a typical query. No change to the code, the input or the output.

### 0.1.3 (2026-10-06)

- A run now compares what your request covers (product codes times reporters times partners times months) with "Maximum trade records" before it reads anything, and the run log warns you if the request is larger. When the maximum cuts the result, the run summary says `truncated: true`, the status message says that there may be more data, and the run summary has a new field `totalRequested`, the most rows the request covers. Before, a cut left no sign in the run summary.
- Which rows a cut keeps has changed. Before, rows were saved by reporter in alphabetical order, each with its oldest months first, so a cut kept the first few reporters with their oldest months and dropped the others. Now rows are saved newest month first: the newest month of every reporter and partner, then the second newest, and so on, so every reporter and partner keeps its newest months. This is also the order of the rows in the dataset. Product codes are still requested in the order you list them.
- Eurostat is never asked again from another address after a refusal. HTTP 401, 403 and 407 are final: the request is recorded once as `blocked`, not asked again, and not charged. Before, it was asked again from a new session, which means a new address when a proxy is used. After HTTP 429 the Actor waits as long as Eurostat asks (Retry-After, up to 60 seconds) and asks again from the same address. If Eurostat asks for a longer pause, or sends `x-ratelimit-remaining: 0`, the request is not asked again, and the failure in the run summary says why. Before, a longer pause was cut to 60 seconds. All requests of a run now use one session, so one address. Only a connection error still replaces it.
- Answers of every content type now reach the checks of the Actor, also plain text and answers without a Content-Type header. A refusal that comes that way is recorded as `blocked` with its status, a rate limit (HTTP 429) is waited out as above, and an answer that is not JSON is asked again after a pause. Before, such an answer ended its request at once as failed, without its status and without a new try.

### 0.1 (2026-10-05)

- First version: monthly EU import and export statistics from Eurostat Comext (DS-045409) by product code, reporting country and partner country, with value in euros, weight, supplementary units and computed unit values.
