Sync data to a sheet, base or warehouse
https://seolyticize.com /api/v1/tools/create_data_sync Copies any dataset query (the query_data shape; see describe_datasets) to the client's Google Sheet (spreadsheetId, sheet), Airtable table (baseId, table — its fields named as the columns) or BigQuery table (projectId, datasetId, tableId — created on first run) on a schedule: daily, weekly or monthly at a UTC hour. replace swaps the contents each run; append adds rows, and with windowDays reads only the last N days ending yesterday so no day is added twice. Needs that destination connected first (get_integration_connect_link for Google, connect_integration for Airtable). Answers 'put our Search Console pages in a sheet every Monday', 'send the analytics to BigQuery daily'. Free.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequireddestinationstringrequirednamestringrequiredqueryobjectrequiredShow child parameters
datasetstringrequireddimensionsstring[]metricsstring[]columnsstring[]filtersobject[]Show child parameters
columnstringrequiredopstringrequiredvaluestring | number | boolean | string | number[]requiredfromstringtostringorderByobject[]Show child parameters
fieldstringrequireddescbooleanlimitintegercrawlIdstringmodestringwindowDaysintegercadencestringrunHourintegerspreadsheetIdstringsheetstringbaseIdstringtablestringprojectIdstringdatasetIdstringtableIdstring{
"clientId": "string",
"destination": "google_sheets",
"name": "string",
"query": {
"dataset": "gsc",
"dimensions": [],
"metrics": [],
"columns": [
"string"
],
"filters": [],
"from": null,
"to": null,
"orderBy": [],
"limit": 0,
"crawlId": "latest"
},
"mode": "replace",
"windowDays": null,
"cadence": "daily",
"runHour": 6,
"spreadsheetId": null,
"sheet": null,
"baseId": null,
"table": null,
"projectId": null,
"datasetId": null,
"tableId": null
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/create_data_sync" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","destination":"google_sheets","name":"string","query":{"dataset":"gsc","dimensions":[],"metrics":[],"columns":["string"],"filters":[],"from":null,"to":null,"orderBy":[],"limit":0,"crawlId":"latest"},"mode":"replace","windowDays":null,"cadence":"daily","runHour":6,"spreadsheetId":null,"sheet":null,"baseId":null,"table":null,"projectId":null,"datasetId":null,"tableId":null}'TypeScript
Python
Go
PHP
Ruby
Java
Responses
data, and its meta.Example
{
"data": {},
"meta": {
"requestId": "string",
"costMicros": 0,
"cached": true,
"cachedFrom": "string",
"dataAsOf": "string",
"sources": [
"string"
],
"partial": true,
"next": [
{
"tool": "string",
"args": {},
"why": "string"
}
],
"nextCursor": "string",
"dryRun": true
}
}Schema
datarequiredmetaobjectrequiredShow child parameters
requestIdstringrequiredcostMicrosintegerrequiredcachedbooleanrequiredcachedFromstringdataAsOfstringsourcesstring[]partialbooleanrequirednextobject[]requiredShow child parameters
toolstringargsobjectwhystringnextCursorstringdryRunbooleanX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerX-Request-IdstringExample
{
"error": "string",
"code": "string",
"next": "string",
"requestId": "string"
}Schema
errorstringrequiredcodestringnextstringrequestIdstringX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/create_data_sync
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/create_data_sync
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger