TanLabs / developer toolsQuick start ↓

FREE APP STORE REVIEW JSON VALIDATOR

Catch broken exports.
Ship clearer reports.

A review export can contain every field and still fail your workflow. Check malformed data, mixed app/country scopes, duplicate review IDs and rating counts before sharing a TanLabs review report.

Python 3.10+ · No packages to install · No API key · Your reviews stay on your computer

LOCAL TERMINAL SYNTHETIC DEMO
python3 validate_output.py demo-export.json --json
{"ok":true,"summaryRows":1,"reviewRows":3,"errors":[]}

FIRST RESULT IN THREE STEPS

Try it without running a paid Actor.

  1. Download & extract

    The ZIP contains readable Python source, two synthetic exports, a quick start and a SHA-256 manifest.

  2. Run the included demo

    Open a terminal in the extracted folder and run the command below. The valid fixture returns exit code 0.

  3. Check your own JSON

    Replace demo-export.json with your TanLabs Actor export. Use --json to gate a report in CI.

python3 validate_output.py demo-export.json --json
python3 validate_output.py demo-invalid-export.json --json
# The second command intentionally fails with exit code 1.
# For a full dataset export, also check every review row:
python3 validate_output.py your-export.json --json --require-reviews

Prefer a single file? Download the Python script · Valid demo JSON · Invalid demo JSON · Download checksums

The demos are invented test data, not customer reviews or evidence of Actor usage.

A SMALL, INSPECTABLE QUALITY GATE

Know why a report needs another look.

01

Malformed fields

Wrong field types, missing values, non-integer ratings, invalid dates and malformed complaint entries produce errors instead of a traceback.

02

Scope & duplicate IDs

Each review needs a matching app/country summary. Duplicate summaries and review IDs are flagged before they inflate downstream counts.

03

Rating counts

The five star buckets must sum to reviewsFetched and agree with its weighted average. Add --require-reviews to compare all review rows per storefront.

CI exit codes
ExitMeaningNext step
0Checks passedReview interpretation and evidence before sharing.
1Data validation failedRead the errors; check export shape, scope and fields.
2File or JSON input errorCheck the file path, JSON syntax or items wrapper.

Accepted shapes: a JSON array, one summary object, or an Apify {"items": [...]} wrapper. A filtered Reviews-only export needs its matching summary; use the full dataset JSON for a mixed export.

READ THE RESULT IN CONTEXT

A passed check is the beginning of review.

This tool targets the TanLabs App Store Review Insights schema, rather than arbitrary JSON from other scrapers. Summary-only exports are allowed by default. For a complete dataset, add --require-reviews to compare each app/country’s row count and star buckets with its summary. Use the default mode for filtered exports. Neither mode proves that a complaint example supports its assigned theme.

The Actor reads recent public Apple RSS samples, capped at roughly 500 reviews per app and country. Keep the collected-review average separate from the store’s overall rating. Theme detection uses keyword rules; check the cited text before turning a theme into a product decision.

NEED THE REVIEW DATA TOO?

From recent reviews to a scoped product report.

TanLabs App Store Review Insights adds rating distributions, version and month trends, and complaint themes with example text to recent iOS review data.

The validator and demo are free. The optional Actor is billed separately by Apify; review its current pricing before starting a run.

COMMON QUESTIONS

Before you run it

Do I need an Apple or Apify API key?

No. The validator reads a local JSON export and makes no network requests. Fetching new review data through the optional Actor is a separate step.

Will my review data be uploaded?

No. Run the downloaded Python script on your computer; your export is read locally. This page does not ask you to upload a file.

Can I use it in CI?

Yes. Add --json for one machine-readable result. Exit codes 0, 1 and 2 mean passed checks, validation failure and input error respectively.

Will it validate exports from any App Store scraper?

It targets the TanLabs summary/review schema. Other scrapers use different field names and row types; map their data to this schema before validation.

Does a passing result prove the export is complete?

Summary-only exports are supported by default. Add --require-reviews when you expect all review rows; it checks row count and star buckets per app/country. It cannot prove complete historical coverage or semantic correctness of themes.