CSV & Excel Diff — Rows, Fields and Schema Changes avatar

CSV & Excel Diff — Rows, Fields and Schema Changes

Pricing

$100.00 / 1,000 spreadsheet comparisons

Go to Apify Store
CSV & Excel Diff — Rows, Fields and Schema Changes

CSV & Excel Diff — Rows, Fields and Schema Changes

Compare two CSV or Excel snapshots. Find added, removed and modified rows, field-level changes and schema differences. Validate unique row keys and expected row counts. Useful for inventory exports, product catalogs and data quality checks.

Pricing

$100.00 / 1,000 spreadsheet comparisons

Rating

0.0

(0)

Developer

Jakson Lucas

Jakson Lucas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

What changed in your supplier price list?

Compare yesterday's supplier catalog with today's export before updating your inventory or storefront. Find changed prices, newly listed products and products missing from the latest file, matched by SKU. The same workflow works for inventory quantities and CRM exports when both files have a stable unique key.

One completed comparison costs US$ 0.10, including up to 10,000 rows per input. A daily comparison is about US$ 3 for 30 runs. Check the Pricing tab for the current price. No-change comparisons are charged too.

Automate a daily catalog check

  1. Get yesterday's and today's complete CSV exports from your existing workflow. This Actor does not download your files or keep the previous snapshot for you.
  2. Send their text as previous and current, with format: "csv" and the exact SKU column name in keyColumn.
  3. Read summary.hasChanges. If false, finish. If true, inspect modified, added and removed before updating downstream systems.
  4. Save today's original export in your own storage as tomorrow's baseline only after a successful comparison.

For n8n or Make, use an HTTP request step with the configuration below. This is a configuration recipe, not an installed or tested n8n template.

  • Method: POST
  • URL: https://api.apify.com/v2/acts/jaksondev~spreadsheet-diff/run-sync-get-dataset-items?maxTotalChargeUsd=0.10&timeout=120
  • Authentication header: Authorization: Bearer YOUR_APIFY_TOKEN (store this in the workflow's credential manager).
  • Content type: application/json
  • JSON body: use the sample below, replacing the CSV strings with your workflow's actual exports.
  • Response: an array containing one comparison report. Set the HTTP client timeout above 120 seconds and do not automatically retry uncertain failures: check the Apify run first to avoid a second paid comparison.

Use the source files' expected row counts if your export system provides them. A missing product in a partial export must not be mistaken for a real catalog removal.

Compare two complete spreadsheet snapshots and get a JSON report of added rows, removed rows, changed fields and schema changes. Match on a unique key such as SKU or ID to keep row reordering from producing false changes.

Try the sample

Paste this input into the Actor:

{
"format": "csv",
"previous": "sku,price\nA,10\nB,20\nC,30",
"current": "sku,price\nD,40\nB,25\nA,10",
"keyColumn": "sku",
"expectedPreviousRows": 3,
"expectedCurrentRows": 3
}

The report shows product D added, product C removed and product B's price changed from 20 to 25. Product A is unchanged even though its row moved. These are fictional sample products.

Inputs

  • format: csv (default) or xlsx. Both versions must use the same format.
  • previous and current: CSV text, or base64-encoded XLSX file bytes. File URLs are not accepted in this version.
  • keyColumn: optional exact column name. An explicit key must exist, be non-null and be unique in both files. Invalid explicit keys fail the run.
  • previousSheet / currentSheet: exact sheet names, mandatory for workbooks with multiple sheets. Each run compares one selected sheet from each file.
  • expectedPreviousRows / expectedCurrentRows: optional counts excluding headers and empty rows. Mismatches stop processing to help catch incomplete exports. Without these counts, a syntactically valid but incomplete export cannot be recognized automatically.

For XLSX, encode the bytes as base64 with your workflow's binary-to-base64 step. Do not paste a filename or a data: URL. The same parser and matching behavior apply to both formats.

Output

The default dataset contains one report. Download JSON for the complete nested structure. It includes summary, previousRowCount, currentRowCount, keyColumn (when found), added, removed, modified, schemaChanges, importantChanges, matching and warnings.

An edited field is represented as:

{"key":"B","fields":[{"column":"price","before":20,"after":25}]}

summary.hasChanges is false when normalized data is unchanged. A comparison with no changes is still a completed comparison.

If no reliable key is inferred, the Actor compares complete rows and preserves duplicate counts. In that mode an edited row appears as one removal and one addition, with an explicit warning. This version does not support composite keys or fuzzy matching.

Limits and behavior

Each input is limited to 5 MiB decoded, 10,000 rows per sheet and 100 columns. The full output must fit within 8 MiB; oversized inputs or results fail rather than silently truncate. XLSX archive checks also apply. CSV must have a header and consistent records. Headers must be non-empty and unique. CSV encoding is UTF-8. Empty cells normalize to null; values, not formatting, are compared.

XLSX formulas need cached results. This Actor does not recalculate formulas, compare formatting, modify source files, keep historical snapshots between runs or identify corresponding products across different businesses.

Billing

When pay-per-event monetization is enabled, one comparison event represents one completed comparison published to the result dataset, including unchanged results. Validation errors do not reach this event. The current price must be checked on the Pricing tab before running. Platform fees, if applicable to the selected pricing configuration, are shown by Apify.

Separate runs are separate comparisons. A run that already has its result does not publish another one on resume. Interruptions around storage/billing must be inspected in the platform records; do not assume that retrying a new run is free.

Data and support

Inputs and outputs are processed in the Actor runtime and stored under the calling account's Apify storage configuration. The comparison code does not send spreadsheet contents to a language model or external analytics service. Manage input/output retention and sharing in your Apify account. Do not place private file contents in public issue reports.

For issues, provide the run ID and a small anonymized example through the Actor's Issues tab. Include the expected result and selected sheet/key. Do not publish credentials or private customer records.