Dataset Format Converter avatar

Dataset Format Converter

Pricing

from $5.00 / 1,000 converted outputs

Go to Apify Store
Dataset Format Converter

Dataset Format Converter

Turn any Apify dataset or JSON list into ready-to-import files: CSV (UK Excel-safe), JSON Lines, PostgreSQL and SQL Server scripts with inferred types, a Microsoft Dataverse table and import file, and validated iCalendar. Deterministic field mapping, no AI guessing. See README.

Pricing

from $5.00 / 1,000 converted outputs

Rating

0.0

(0)

Developer

LandlordTools

LandlordTools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Turn any Apify dataset, or a JSON list, into the exact file the next system needs, in one run: CSV in the right style for UK, US or European Excel, Salesforce, HubSpot or Airtable; SQL scripts for seven databases with column types worked out; a Microsoft Dataverse table definition and import file; BigQuery load files; maps; calendars; feeds; sitemaps; real .xlsx workbooks; contact cards; search, time-series and document-database load files; fixed-width text for legacy importers; Parquet for data lakes; shopping feeds for Google, Meta and Shopify; bank-statement imports for Xero, QuickBooks, Sage and FreeAgent; and Teams and Slack cards. 44 targets.

It is deterministic: field mapping is explicit (or everything is flattened), so the same input always gives the same files and you can check them. Nothing goes to an AI service. Every format is read back by the test suite: CSV is parsed, JSON parsed, XML checked for well-formedness, the SQLite script is executed, and calendars pass an RFC 5545 validator 4.

Targets

TargetFile(s)What's specialFor
csvoutput.csvPlain RFC 4180 CSV (UTF-8, ISO dates or csvDateFormat)Any tool, Google Sheets, Power BI
tsvoutput.tsvTab-separatedDatabases, command-line tools
excel-uk-csvoutput-excel-uk.csvBOM, dd/mm/yyyy dates, formula-injection guardExcel (UK)
excel-us-csvoutput-excel-us.csvBOM, mm/dd/yyyy dates, formula guardExcel (US)
excel-eu-csvoutput-excel-eu.csvBOM, ; separator, decimal commas, formula guardExcel (most of Europe)
salesforce-csvoutput-salesforce.csvUTF-8, ISO dates, UTC date-times, formula guardSalesforce Data Import Wizard / Data Loader
hubspot-csvoutput-hubspot.csvUTF-8, ISO dates, UTC date-times, formula guardHubSpot imports
airtable-csvoutput-airtable.csvUTF-8, ISO dates, formula guardAirtable CSV import
dataversedataverse-import.csv + dataverse-table.jsonImport CSV with display-name headers, plus a table definition (column types, schema names with your publisher prefix, lengths)Microsoft Dataverse / Power Apps / Power Automate
jsonoutput.jsonArray of flat objectsAPIs, web apps
jsonloutput.jsonlOne object per lineData pipelines, Elasticsearch, Splunk
bigquerybigquery-data.jsonl + bigquery-schema.jsonColumn names made BigQuery-safe, types and modes; exact NUMERICsGoogle BigQuery (bq load --source_format=NEWLINE_DELIMITED_JSON)
xmloutput.xmlWell-formed XML with safe element namesLegacy systems, ETL tools
yamloutput.yamlYAML list (JSON-compatible scalars)Config-driven tools
htmloutput.htmlAccessible HTML tableEmail, intranets
markdownoutput.mdMarkdown table (pipes escaped)Docs, GitHub, Notion
sql-postgresoutput-postgres.sqlCREATE TABLE with inferred types + batched INSERTsPostgreSQL, Supabase
sql-sqlserveroutput-sqlserver.sqlNVARCHAR/BIT/DECIMAL/DATETIMEOFFSET, batches of 1000SQL Server, Azure SQL
sql-mysqloutput-mysql.sqlBacktick identifiers, backslash-safe stringsMySQL, MariaDB
sql-sqliteoutput-sqlite.sqlExecuted for real in the testsSQLite
sql-snowflakeoutput-snowflake.sqlNUMBER/TIMESTAMP_TZSnowflake
sql-oracleoutput-oracle.sqlVARCHAR2/CLOB, TO_TIMESTAMP_TZ, one INSERT per rowOracle
geojsonoutput.geojsonFeatureCollection of points (geoMapping)QGIS, Mapbox, Leaflet, ArcGIS
kmloutput.kmlPlacemarks with ExtendedData (geoMapping)Google Earth, Google My Maps
icsoutput.icsEvents (icsMapping), validated against RFC 5545 before savingOutlook, Google Calendar, Apple Calendar
rssfeed.xmlRSS 2.0 feed (rssMapping)Feed readers, Slack/Teams RSS apps
sitemapsitemap.xmlXML sitemap of URLs (sitemapMapping)Search engines
xlsxoutput.xlsxReal Excel workbook: numbers, true/false and dates stored as typed cells, bold frozen header row, filter on, column widths set; formula-like text stays text; byte-identical for the same input 11Excel, SharePoint, Teams, Google Sheets, Power BI
vcardcontacts.vcfvCard 4.0 contacts (vcardMapping), escaped and line-folded per RFC 6350 6Outlook, Google Contacts, iPhone, CRMs
gpxoutput.gpxGPX 1.1 waypoints (geoMapping) 7GPS units, Garmin, Strava, field-survey apps, QGIS
elasticsearch-bulkelasticsearch-bulk.ndjson_bulk body: an index action line before each document, index = tableName in lower case 8Elasticsearch, OpenSearch, Kibana (POST _bulk)
influx-lineinflux.lpLine protocol (influxMapping): tags and keys escaped, integers marked i, nanosecond timestamps 9InfluxDB, Telegraf, QuestDB and other time-series stores (meter and SCADA data)
mongodb-jsonlmongodb.jsonlExtended JSON (relaxed): date-times become {"$date": ...} so they load as real dates 10MongoDB (mongoimport), Atlas, Cosmos DB for MongoDB
fixed-widthoutput-fixed-width.txt + fixed-width-layout.jsonSpace-padded columns (numbers right-aligned), CRLF, plus a layout file giving each field's start, width and typeMainframe, COBOL, banking and utility billing importers
parquetoutput.parquetApache Parquet: typed columns (string, int64, double, boolean, date, UTC timestamp), GZIP pages; read back with pyarrow and DuckDB 12Microsoft Fabric, Databricks, Snowflake, BigQuery, Athena, DuckDB, pandas

Platform presets

TargetFileWhat it doesFor
google-merchantgoogle-merchant.tsvProduct feed (productMapping): 15.00 GBP prices, in_stock/out_of_stock/preorder/backorder, sale price from a higher wasPrice, GTIN check digits verified, identifier_exists set when there's no GTIN or brand + MPN, Google's length limits applied, commas in URLs encoded 13Google Merchant Center (Shopping ads, free listings)
meta-catalogmeta-catalog.csvCatalogue feed (productMapping): in stock/out of stock, up to 20 extra images within 2,000 characters, Meta's length limits; warns when brand is missing 14Meta Commerce Manager (Facebook and Instagram shops, Advantage+ catalogue ads)
shopify-productsshopify-products.csvProduct import (productMapping): unique handles from titles, HTML body, compare-at price from wasPrice, extra images as extra rows, out-of-stock items as drafts 15Shopify admin > Products > Import
xero-bank-csvxero-bank-statement.csvDate, Amount (money out negative), Payee, Description, Reference; UK or US date order (bankDateStyle) 18Xero bank statement import
quickbooks-bank-csvquickbooks-bank-statement.csv3-column Date, Description, Amount 19QuickBooks Online bank upload
sage-bank-csvsage-bank-statement.csvDate, Description, Amount in that order, a description on every row, plus Reference and Payee name 16Sage Accounting bank import
freeagent-bank-csvfreeagent-bank-statement.csvNo header; dd/mm/yyyy, amount to 2 decimal places, description with no commas, quotes or line breaks 17FreeAgent bank statement upload
teams-cardteams-card.jsonAdaptive Card 1.4 message (cardMapping): up to 20 items with links and facts; warns over Teams' 28 KB limit 21Teams incoming webhooks and Workflows, Power Automate
slack-blocksslack-blocks.jsonBlock Kit message (cardMapping): header, up to 20 linked items with fields, within Slack's block and text limits 20Slack incoming webhooks, chat.postMessage

Platform presets load straight into the platform, so they don't add the spreadsheet formula guard (which would end up stored in the data). Item rows the platform would reject (no id, zero price, relative links, impossible dates) are skipped and counted in the warnings. Layouts were checked against each platform's help pages on 3 October 2026; platforms change their import screens, so check a small file first.

All spreadsheet targets except csv and tsv prefix cells that start with =, +, - or @ with an apostrophe, so a value can't run as a formula when opened (CSV injection) 5.

Input

{
"items": [
{
"name": "Example site A",
"site": {
"region": "West Midlands",
"lat": 52.4862,
"lon": -1.8904
},
"start": "2026-11-02",
"tags": [
"solar",
"battery"
],
"capacityMw": 12.5,
"live": true,
"url": "https://example.com/a"
},
{
"name": "Example site B, phase 2",
"site": {
"region": "East of England",
"lat": 52.2053,
"lon": 0.1218
},
"start": "2027-01-15",
"tags": [
"wind"
],
"capacityMw": 40,
"live": false,
"url": "https://example.com/b"
},
{
"name": "=Example site C",
"site": {
"region": "London",
"lat": 51.5072,
"lon": -0.1276
},
"start": "2026-12-01T09:30:00Z",
"tags": [],
"capacityMw": null,
"live": true,
"url": "https://example.com/c"
}
],
"targets": [
"excel-uk-csv",
"sql-postgres",
"dataverse",
"ics",
"geojson",
"xlsx"
],
"tableName": "sites",
"icsMapping": {
"summary": "name",
"start": "start",
"location": "site.region"
},
"geoMapping": {
"lat": "site.lat",
"lon": "site.lon",
"name": "name"
}
}
  • Source: items (a JSON list) or datasetId (any Apify dataset this run's token can read 1; up to 20,000 items).
  • targets: one or more from the table.
  • fields (optional): [{"from": "site.region", "to": "Region", "type": "string"}]. Paths use dots for nesting and numbers for list positions (tags.0). Without fields, nested objects are flattened to dotted columns, lists of plain values are joined with arrayJoiner (default "; "), and lists of objects become JSON text.
  • Types are inferred per column (boolean, integer, number, date, date-time, string) and drive SQL, Dataverse and BigQuery column types. Override them with fields[].type.
  • Mappings for the formats that need them (each value is a field path):
    • icsMapping: {summary, start, end?, description?, location?, uid?}
    • geoMapping (geojson, kml, gpx): {lat, lon, name?}
    • rssMapping: {title, link, channelLink, description?, date?, channelTitle?, channelDescription?}
    • sitemapMapping: {loc, lastmod?}
    • vcardMapping: {fn, org?, title?, email?, tel?, url?, address?, note?} (a list of emails or phone numbers gives one line each)
    • productMapping (shopping feeds): {id, title, price, link, description?, imageLink?, additionalImages?, availability?, availabilityDate?, condition?, brand?, gtin?, mpn?, sku?, productType?, wasPrice?}, plus currency (ISO 4217, default GBP). Prices may be numbers or text such as £1,299.00; availability may be true/false, InStock or a schema.org URL.
    • bankMapping (bank statements): {date, amount, description?, payee?, reference?}. Dates are ISO or dd/mm/yyyy; amounts are signed (money out negative) or in brackets. bankDateStyle: uk (default) or us.
    • cardMapping (Teams and Slack): {title, text?, link?, fields?}, where fields is a comma-separated list of up to 10 columns shown as facts.
    • influxMapping: {time, tags?}. time is an ISO timestamp with Z or an offset; tags is a comma-separated list of columns to index as tags (every other column becomes a field). The measurement is tableName.
  • Energy add-on: "enrich": {"settlementPeriodFrom": "timestamp"} adds GB electricity settlementDate and settlementPeriod columns (46, 48 or 50 periods a day around clock changes), so half-hourly data lines up with Elexon and supplier settlement data.

Output

Each file is saved in the run's key-value store under the name shown. The SCHEMA record holds the inferred columns, and the dataset gets one row per file (where it is, rows, bytes, warnings). The first row for the input above:

{
"target": "excel-uk-csv",
"key": "output-excel-uk.csv",
"contentType": "text/csv; charset=utf-8",
"rows": 3,
"columns": 9,
"bytes": 369,
"url": null,
"warnings": []
}

Warnings say when rows were skipped (for example, missing coordinates for a map) and why.

Limits

  • Up to 20,000 items and 1,000 columns per run.
  • SQL scripts are for loading data; review the inferred types before production use.
  • Dataverse: create the table from dataverse-table.json (Power Apps > Tables > New table), then import dataverse-import.csv (Import > Import data from Excel/CSV, or a dataflow) 2.
  • Excel cells hold at most 32,767 characters; longer text is cut, with a warning. Date-times go into .xlsx in UTC.
  • Oracle string literals over 4,000 characters need loading another way (the column becomes CLOB).

Pricing

Pay per event: $5 per 1,000 results, plus Apify's tiny per-run start fee ($0.00005). See the Pricing tab for the current price.

Local use

With Node.js 22 or later, run node cli.js examples/input.json (writes files to ./out), or npm test.

Sources

  1. Apify: Get dataset items (API). Accessed 3 October 2026.
  2. Microsoft Learn: Import data into Dataverse (Power Apps). Accessed 3 October 2026.
  3. RFC 4180: Common Format and MIME Type for CSV Files. Accessed 3 October 2026.
  4. RFC 5545: iCalendar. Accessed 3 October 2026.
  5. OWASP: CSV Injection. Accessed 3 October 2026.
  6. RFC 6350: vCard Format Specification. Accessed 3 October 2026.
  7. GPX 1.1 Schema Documentation. Accessed 3 October 2026.
  8. Elastic: Bulk API. Accessed 3 October 2026.
  9. InfluxData: Line protocol (InfluxDB v2). Accessed 3 October 2026.
  10. MongoDB: Extended JSON. Accessed 3 October 2026.
  11. Ecma International: ECMA-376 Office Open XML File Formats. Accessed 3 October 2026.
  12. Apache Parquet: File format. Accessed 3 October 2026.
  13. Google Merchant Center: Product data specification. Accessed 3 October 2026.
  14. Meta: Catalog fields reference. Accessed 3 October 2026.
  15. Shopify Help Center: Product CSV columns. Accessed 3 October 2026.
  16. Sage: Supported file formats for bank statement imports. Accessed 3 October 2026.
  17. FreeAgent: Format a CSV file to upload a bank statement. Accessed 3 October 2026.
  18. Xero Central: Import a bank statement. Accessed 3 October 2026.
  19. QuickBooks: Format CSV files to get bank transactions into QuickBooks. Accessed 3 October 2026.
  20. Slack: Block Kit blocks reference. Accessed 3 October 2026.
  21. Microsoft Learn: Create an Incoming Webhook (Teams). Accessed 3 October 2026.