Faro — verify before you act avatar

Faro — verify before you act

Pricing

$0.01 / verdict

Go to Apify Store
Faro — verify before you act

Faro — verify before you act

Verify trust before you act: URL, payee (UPI/scam/handle), or message. Red/yellow/green verdict with reason and recommended action. Agent-friendly pay-per-event.

Pricing

$0.01 / verdict

Rating

0.0

(0)

Developer

vednt mathur

vednt mathur

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

8 days ago

Last modified

Share

Faro is a trust and verification service for agents and automation. Give it a URL, a payee identity, or an inbound message; it returns one consistent verdict object — 🟢 green, 🟡 yellow, or 🔴 red — with a plain-language reason, a recommended_action (allow / warn / block / review), and the signals that drove the decision.

This Actor is a thin proxy to the Faro engine. It does not score, re-rank, or mutate verdicts. Whatever Faro's API returns is what you get in the dataset.

Advisory only. Faro advises; you decide. Faro never blocks payments, navigation, or message delivery on your behalf.

What you can verify

Input typeUse when
urlBefore visiting, sharing, or acting on a link
payeeBefore sending money — UPI VPA, handle, IBAN, IFSC, tax IDs (e.g. GSTIN, Korea BRN), Singapore UEN, or a company/FI name
messageBefore acting on inbound SMS, email, or chat content

Payee checks include additive Asia structure signals (Korea BRN checksum, Singapore UEN shape) and — when Faro is configured with a MAS entities feed — a possible-match screen against MAS-listed financial institution names. These never assert KYB identity on their own.

Example input

{
"type": "payee",
"value": "merchant@paytm"
}

Output schema (for agents)

This Actor declares an Apify output schema (default dataset) and a dataset schema describing each VerdictResult field — so Store / MCP agents know to branch on verdict and recommended_action. See .actor/output_schema.json and .actor/dataset_schema.json.

Example output (one dataset item per run)

{
"verdict": "yellow",
"confidence": 0.5,
"artifact": { "type": "payee", "value": "merchant@paytm" },
"reason": "Payee format is valid; no strong risk signals found.",
"recommended_action": "warn",
"signals": [],
"explanation": null,
"cached": false,
"first_seen": "2026-07-15T00:00:00Z",
"checked_at": "2026-07-15T00:00:00Z",
"request_id": "req_abc123"
}

Environment variables (Actor secrets — never in input)

Configure these in the Apify Console under Settings → Environment variables (mark the API key as secret):

VariableRequiredDescription
FARO_API_KEYYesServer-side Faro API key. Agents never see this — they pay Apify; the Actor authenticates to Faro.
FARO_HOSTNoFaro API base URL. Default: https://api.farofinance.app.

Staging vs production

EnvironmentSuggested FARO_HOST
Local devhttp://127.0.0.1:8000
StagingYour staging Render/Railway URL
Productionhttps://api.farofinance.app

Point FARO_HOST at the deployment whose FARO_API_KEYS includes the key you store in FARO_API_KEY.

Licence-clean mode

Until commercial licences for OpenSanctions and Google Safe Browsing (Web Risk) are in place, this Actor calls Faro with X-Faro-Signal-Scope: licence-clean. That skips those tier-1 integrations while still running RDAP domain age, reputation graph lookup, government sanctions feeds, Companies House / VIES / UEN / Korea BRN / MAS name-feed checks (when configured on the Faro server), and other commercially-clean sources.

On the Faro server, you can also register the Actor's API key in FARO_LICENCE_CLEAN_API_KEYS so licence-clean scope applies even without the header.

When licences land, remove the header from main.js (or stop listing the key in FARO_LICENCE_CLEAN_API_KEYS) to enable premium signals.

Pricing

This Actor uses Apify pay-per-event monetization. One successful verdict = one verdict event charge + one dataset item. Validation errors and Faro API failures do not charge.

SettingValue
Event nameverdict (must match Actor.charge in main.js)
Recommended list price$0.01 per verdict
Primary eventverdict
Free allowanceOptional 1–3 free events in Console (helps Store / MCP trials)

Apify takes its platform share (~20%) plus compute usage from revenue — set the list price so net ≈ your target unit economics.

This rail does not require Faro API x402 paywall or Dodo payments. Agents pay Apify only; the Actor authenticates to Faro with a server-side key.

Configure monetization in Console before going public. Test locally with:

$ACTOR_TEST_PAY_PER_EVENT=true apify run

Publish checklist (Apify Store)

Actor Console: faro-verify — Store / MCP slug: vednux/faro-verify.

  1. Faro (Render faro-api only) — add a dedicated Actor key to FARO_API_KEYS and the same value to FARO_LICENCE_CLEAN_API_KEYS. Do not put it on faro-mcp. Leave X402_PAYWALL_ENABLED=false.
  2. Apify secrets — Settings → Environment variables: secret FARO_API_KEY, optional FARO_HOST (https://api.faro.dev or https://api.farofinance.app).
  3. Billing + PPE + Store — complete payout billing at Publication (required), then run:
    $cd apify-actor && node scripts/configure-store.mjs
    Sets verdict @ $0.01 (primary), public listing, categories AI / DEVELOPER_TOOLS / AUTOMATION.
  4. Smoke — Run {"type":"url","value":"https://example.com"} (matches input-schema prefill used by Store QA; then payee + message). Confirm one dataset item, one verdict charge, no charge on bad input (Actor.fail). Keep prefills so daily Store QA stays green.
  5. MCP pin (optional)https://mcp.apify.com?tools=vednux/faro-verify

Deploy source updates with:

cd apify-actor
apify push

Step-by-step founder notes: ./PUBLISH.md.

Local development

cd apify-actor
npm install
# Create apify-actor/storage/key_value_stores/default/INPUT.json:
# { "type": "url", "value": "https://example.com" }
export FARO_API_KEY=your-faro-key
export FARO_HOST=http://127.0.0.1:8000 # optional
apify run
# or: npm start

Results land in storage/datasets/default/.

Monetization API notes (Apify SDK v3)

  • Charge with await Actor.charge({ eventName: 'verdict' }) after a successful Faro response, before Actor.pushData.
  • Actor.charge returns a ChargeResult; check eventChargeLimitReached in high-volume Actors.
  • Local PPE testing: ACTOR_TEST_PAY_PER_EVENT=true (optional ACTOR_USE_CHARGING_LOG_DATASET=true for a charge log).
  • Do not add retry loops that could double-charge; this Actor makes a single API call per run.

What this Actor does not do

  • Expose the Faro API key in input, output, logs, or this README
  • Return raw OpenSanctions or Safe Browsing records
  • Modify or re-score the verdict object
  • Imply that Faro blocks anything on your behalf