Screenshot Comparison for QA - DiffShot avatar

Screenshot Comparison for QA - DiffShot

Pricing

from $0.12 / image pair compared

Go to Apify Store
Screenshot Comparison for QA - DiffShot

Screenshot Comparison for QA - DiffShot

Compare before and after screenshots for meaningful text, price, and layout changes. Read the default dataset. Set maxTotalChargeUsd above $0.12.

Pricing

from $0.12 / image pair compared

Rating

0.0

(0)

Developer

Dravara LLC

Dravara LLC

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 days ago

Last modified

Share

DiffShot

Compare the before and after screenshots for meaningful changes.

DiffShot compares a before screenshot with an after screenshot and reports what changed in human terms. It is not another website-change monitor: its job is to separate substantive changes from pixel or formatting noise.

Changes it can explain

  • Added, removed, or revised text
  • Changed numbers, dates, and prices
  • Added, removed, or changed controls
  • Changed obligations or policy language visible in the images
  • Moved elements
  • Formatting-only changes when explicitly requested

The result includes structured before/after regions, severity, an explanation, a deterministic pixel-change ratio, and a side-by-side annotated PNG.

Output example

This sanitized example shows the complete dataset contract. The adapter stores the comparison PNG in the run's key-value store and returns its storage key.

{
"summary": "The renewal price increased and the call-to-action label changed.",
"changes": [
{
"change_type": "price",
"severity": "high",
"title": "Annual renewal price increased",
"before_text": "$99 per year",
"after_text": "$129 per year",
"explanation": "The visible annual price increased by $30.",
"regions": {
"before": {"x": 0.61, "y": 0.24, "width": 0.18, "height": 0.06},
"after": {"x": 0.61, "y": 0.24, "width": 0.18, "height": 0.06}
}
}
],
"limitations": [],
"comparison_image": {
"filename": "diffshot-comparison.png",
"mime_type": "image/png",
"storage_key": "diffshot-comparison.png",
"sha256": "1111111111111111111111111111111111111111111111111111111111111111",
"width": 2400,
"height": 900
},
"before_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
"after_sha256": "3333333333333333333333333333333333333333333333333333333333333333",
"pixel_change_ratio": 0.0342,
"ci_gate": {
"status": "not_evaluated",
"passed": null,
"policy": null,
"checks": [],
"decision_summary": "No CI gate policy was supplied. The comparison was not used to pass or fail a build.",
"evidence_notice": "The pixel-change ratio is deterministic; review model-produced findings against the numbered evidence."
},
"review_notice": "Verify each claimed change against its numbered before/after region."
}

Optional CI gate

Add ci_gate_policy when the comparison should pass or fail a build. Supported criteria are:

  • Maximum pixel-change ratio
  • Maximum meaningful-change count
  • Blocked severities
  • Blocked change types
  • Any reported limitation

At least one criterion is required. A value exactly equal to a maximum passes. The result always includes ci_gate: not_evaluated when no policy was supplied, otherwise passed or failed with one check per criterion and the numbered changes that caused a failure.

The gate evaluation itself is deterministic. The pixel ratio is computed by image code. Meaningful-change count, severity, type, and limitations depend on model-produced findings. Review the numbered regions and comparison PNG before accepting a baseline.

A failed CI gate is still a completed comparison and successful result event; it does not turn the Actor run into a provider failure or remove the creator charge.

Supported input

Exactly two PNG, JPEG, or WebP images per run; each at most 12 MB, 8,192 pixels per side, and 20 megapixels. Images selected with the Apify Console file uploader are read inside this limited Actor with its scoped storage access. Direct inline data URLs should stay at or below 6 MB of raw image bytes each because Apify run-input requests have a smaller limit than uploaded or remote files. Image order is always before, then after. Identical normalized images skip model analysis and return an exact no-change result.

Automation boundary

API and CI callers should keep approved baseline images under their own review and start one Actor run for each before-and-after pair. This Actor does not replace baselines or combine several pairs under one result event. Each pair therefore keeps the same input limits, result contract, and creator charge as a console run.

For API starts, check the live Actor pricing first and send an explicit Apify maxTotalChargeUsd ceiling for each run. Do not rely on a client default.

This Actor accepts images, not page URLs. Reliable URL capture requires a separate hardened browser Actor with private-network blocking, redirect revalidation, navigation limits, and browser isolation. That Actor is not part of this release.

Self-service run and recovery

No separate Dravara account, API key, integration, or support handoff is required. Upload the before image first and the after image second, start one run, read the default-dataset item, and open diffshot-comparison.png from the run's key-value store. Review reported limitations before acting on the comparison.

If input validation fails, correct the files or named field and start a new run. If the analysis service is temporarily unavailable, wait a few minutes and start one new run; a failed run does not continue in the background. If a charge, dataset, or artifact state ever looks unclear, do not loop automatic retries: inspect that run's Charges, default dataset, and key-value store first. The Self-service failure details output opens the sanitized key-value-store OUTPUT record with the stable error code, retry guidance, and next action.

Billing

Dravara's creator charge for a successful run is $0.40005: the $0.00005 apify-actor-start event plus $0.40 for image-pair-compared. Apify separately passes its variable platform usage to the customer and determines the final displayed total; Dravara does not reduce its creator charge to absorb that usage. The result event is captured only after the comparison artifact and dataset item exist. Validation or provider failures skip the result charge, but the Actor-start charge and Apify platform usage can still apply. The synthetic sample input is billed like any other run.

Privacy

Both images and optional context are processed by Dravara, LLC's private service and the OpenAI API using store: false; applicable provider abuse-monitoring retention may still apply. Apify retains normal run storage under the runner's settings. Remove credentials and unrelated personal or regulated information before upload.

Optional defect contact: support@dravarahq.com. Send only the Apify run ID and safe error text, never the input. Support does not complete or deliver failed runs.