The issue is less that your API access is being throttled (in lieu of a paid plan) but rather than the infrastructure requires HTTP requests to be serviced within a finite period of time, otherwise the associated service works will timeout and get killed. So short of running your own private server and tweaking the server’s networking parameters, there’s not a lot you can do… [FWIW this is one of the reason why we now enforce a default 1000 paging limit on direct API requests, although, as noted, this does not directly affect indirect synchronous export requests because they are often return the cached copy].
Yes I might suggest taking this approach initially, before perhaps attempting to rework your entire workflow to a PUSH’ed REST services model. If there is a subset of fields that you need in your synchronous exported dataset, and further a subset or well-defined filter of which actual submissions you need - eg filtered on a Survey_Day field - then this may significantly reduce the size of the dataset being exported such that it’ll avoid timeout issues.
Yes, you can filter the data in an export based on an arbitrary chosen field; however, this is not directly exposed thru the Kobo UI which only lets you filter on submission time (and which fields to include):
And because you cannot perform the desired type of field-specific filtering with a regular export, you cannot use this approach to generate the corresponding export-setting(s) needed for a synchronous export. So instead, to filter the submissions included in a synchronous export based on a particular field, you have hit the Kobo API directly.
The API in question is this one:
POST /api/v2/assets/{uid_asset}/export-settings/
This can be used to generate a custom export-setting directly, one which includes the optional query filter that will define the criteria for which submissions to include:
The syntax is a bit tricky to get right, and if you get anything wrong then it wont work, but please take a look at the following and perhaps use it as a template.
First, you need to construct the JSON containing the desired export-setting. If you want all the data fields included, and just filter which submissions to include on, say, a specific date field, then the following exportquery.json JSON should work:
{
“name”: “myexport2”,
“export_settings”: {
“lang”: “_default”,
“fields_from_all_versions”: false,
“group_sep”: “/”,
“hierarchy_in_labels”: true,
“multiple_select”: “summary”,
“type”: “csv”,
“query”: {“$and”: [{“date”: {“$gte”:“2026-01-01”}}, {“date”: {“$lt”:“2026-06-18”}}] }
}
}
In this example, the export-settings has all the usual fields but now also includes the optional query field. Note the $and (the AND logical operator), $gte (greater-than-or-equal relational operator) and $lt (less-than relational operator). This will basically filter out submissions unless the date is this year (>= Jan 1, 2026) but before today. Adjust this json-ized expression as needed.
You can then use an API tool like curl or Postman to POST this JSON to the above Kobo API to create a new export setting with the included query. eg for our Kobo global server:
KPI=‘https://kf.kobotoolbox.org’
curl -v -X POST -H "Authorization: Token $TOKEN" -H "Content-Type: application/json" -d @exportquery.json "$KPI/api/v2/assets/$ASSETID/export-settings/"
where $ASSETID is the project ID of the project you want a synchronous link for, and $TOKEN is your own API token.
This generates a new export-setting that will filter your submissions and only return those within the date range:
This is my dataset, with a variety of different dates:
And this is the data returned for the above export-setting data_url_csv link:
Export_filter_test_-latest_version-labels-_2026-06-18-23-57-40.csv|attachment (714 Bytes)
"start";"end";"test description";"date";"_id";"_uuid";"_submission_time";"_validation_status";"_notes";"_status";"_submitted_by";"__version__";"_tags";"meta/rootUuid";"_index"
"2026-06-18T08:55:05.279+12:00";"2026-06-18T08:55:12.891+12:00";"last week";"2026-06-11";"783903636";"96175ea6-c822-4640-b594-6f35c3a940f6";"2026-06-17T20:55:13";"";"";"submitted_via_web";"";"vphxtXiiv3kKbYPQCFfcvN";"";"uuid:96175ea6-c822-4640-b594-6f35c3a940f6";"1"
"2026-06-18T08:55:21.520+12:00";"2026-06-18T08:55:34.896+12:00";"last month";"2026-05-21";"783903825";"f7c94f19-a2b1-4a1b-848d-d53fba8e0aa0";"2026-06-17T20:55:35";"";"";"submitted_via_web";"";"vphxtXiiv3kKbYPQCFfcvN";"";"uuid:f7c94f19-a2b1-4a1b-848d-d53fba8e0aa0";"2"
As you can see, of the 5 total submissions, only the two submissions - for ‘last week’ and ‘last month’ - are returned, showing that the filter is working. Whereas ‘last year’, ‘today’ and ‘next week’ submissions are all absent because they do not meet the new query criteria.
I realize this is quite a bit involved, but please have a go and see if you can likewise get a filtered export-query working.
You can also include only a subset of fields to return to further reduce the size (and duration) of the export, by adding a ‘fields’ into your JSON settings. I’d suggest doing a regular export with filtered fields and seeing what this looks like in the resulting export-settings, and copying that into your custom JSON.