# Balasar FeedProof - Product JSON-LD Check (`balasar.ai/balasar-feedproof`) Actor

Free beta: compare permitted public product pages with supplied SKU, price, currency and availability. Static JSON-LD only; ambiguous evidence stays inconclusive.

- **URL**: https://apify.com/balasar.ai/balasar-feedproof.md
- **Developed by:** [Harun Balasar](https://apify.com/balasar.ai) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Balasar FeedProof — Product JSON-LD Check

Free beta for checking a shop you own or have explicit permission to inspect.
Compare an exact SKU, price, currency and availability with static product JSON-LD.
FeedProof reads public HTML; it does not open a browser, log in or change your shop.
It does not verify visible prices, JavaScript-rendered variants, tax, checkout or legal compliance.

### Start with the sample

Leave **Synthetic sample** enabled for an original, network-free example. This is labelled
synthetic in the result. For a real check, disable it and enter the parameters below, replacing
the placeholder URL and hostname with your permitted shop. Do not include secrets or personal data.

```json
{
  "sample": false,
  "parameters": {
    "products": [{
      "sku": "0001",
      "url": "https://your-shop.example/item",
      "price": "12.50",
      "currency": "EUR",
      "availability": "in_stock"
    }],
    "allowedHosts": ["your-shop.example"],
    "allowedUseConfirmed": true
  }
}
```

SKU, price and currency must be strings. Keep leading SKU zeroes. Use a decimal point,
a three-letter uppercase currency and `in_stock`, `out_of_stock` or `preorder`.
Listing a hostname does not give permission to scrape it: check the source's terms and your
rights first. Robots rules are checked before product pages; they do not replace permission.
The publisher-permitted acceptance example used the fictional shop at
https://magicscraper.app/demo/. The placeholder above is not a working integration.

### Read the result

Open the run's **Output** tab or its default key-value store's `OUTPUT` record.
Each product includes its SKU, URL, status and, where available, structured observations,
differences, a timestamp, page hash and robots evidence. Page HTML is not saved by this Actor.

| Result | Meaning |
| --- | --- |
| `STRUCTURED_DATA_MATCH` | One exact SKU and one unambiguous offer match the supplied fields. |
| `MISMATCH` | Observed structured fields differ; see the listed differences. |
| `INDETERMINATE` | The evidence is missing, inaccessible, ambiguous or unsupported. Neither a pass nor proof of a shop error. |

`CHECK_COMPLETE` means all requested products received a result, not that all matched.
Multiple offers, unclear variants, malformed JSON-LD and additional price specifications
require manual checking. HTML comments, templates and non-HTML responses are not product evidence.
JSON-LD graphs, product lists and explicit SKU-specific variants are supported conservatively.

### Limits and costs

No Actor fee or paid event is enabled. Apify platform usage can consume your included credits
or incur charges under your own Apify plan. This beta does not guarantee zero platform cost.
Keep an account spending limit appropriate to your budget before running it.

A run accepts at most 20 products and five exact hostnames, with 25 HTTPS requests,
2 MiB per response, 10 MiB total response data and a 60-second network budget.
The published default uses 256 MiB memory, a 90-second run timeout and no restart on error.
Public IPv4 DNS addresses are pinned to each connection. Redirects, private network targets,
IPv6-only sources and compressed responses are unsupported. Robots delays above ten seconds
are declined; shorter delays must fit the run budget. Errors remain inconclusive; no bypass is attempted.

### Privacy, retention and deletion

The Actor uses limited Apify permissions. It restricts each run and its default key-value store
to authorized account access and verifies those settings before saving results. Making the Actor
public does not make your results public. Account collaborators with granted access may read them.
Input and results remain in Apify storage. This Actor sends no report to an external service,
creates no named history store and logs static error codes rather than page content.

Retention is managed by Apify and your account plan. Unnamed run storage expires according to
that policy; naming storage or changing sharing settings can change its retention or access.
There is no separate automatic erasure service or fixed deletion guarantee from Balasar.
To delete sooner, open **Storage → Key-value stores** in Apify Console and delete the run's
store, then delete the run from **Runs** if you also want its metadata removed. Deletion is permanent.
Do not change storage sharing to public or enter credentials in product URLs.

### Support and beta scope

Use this Actor's **Issues** tab for support. Include the run ID, static error code and a
redacted description of the expected result. Never post tokens, private inputs or customer data.
Support is best effort, with no uptime or response-time guarantee. Recheck uncertain results
manually before business decisions. Compatibility may change during the beta.

The runtime rejects live billing. A `billable` field is not a charge; `chargedEvents` is zero.
This beta makes no revenue, conversion or checkout-accuracy promise. Third-party dependency
notices are included in the source package as `THIRD_PARTY_NOTICES.md`.

# Actor input Schema

## `sample` (type: `boolean`):

Start with a labelled network-free sample. Disable to check explicitly permitted public product pages.

## `parameters` (type: `object`):

For a real check, supply products, allowedHosts and allowedUseConfirmed as shown in the README. Up to 20 products and five exact hostnames; no logins or private data.

## Actor input object example

```json
{
  "sample": true,
  "parameters": {}
}
```

# Actor output Schema

## `report` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("balasar.ai/balasar-feedproof").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("balasar.ai/balasar-feedproof").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call balasar.ai/balasar-feedproof --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,balasar.ai/balasar-feedproof"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CncooMTRQnJHA5jkc/builds/55SmEVbCLT3LpZgj8/openapi.json
