Faro — verify before you act
Pricing
$0.01 / verdict
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
8 days ago
Last modified
Categories
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 type | Use when |
|---|---|
url | Before visiting, sharing, or acting on a link |
payee | Before sending money — UPI VPA, handle, IBAN, IFSC, tax IDs (e.g. GSTIN, Korea BRN), Singapore UEN, or a company/FI name |
message | Before 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):
| Variable | Required | Description |
|---|---|---|
FARO_API_KEY | Yes | Server-side Faro API key. Agents never see this — they pay Apify; the Actor authenticates to Faro. |
FARO_HOST | No | Faro API base URL. Default: https://api.farofinance.app. |
Staging vs production
| Environment | Suggested FARO_HOST |
|---|---|
| Local dev | http://127.0.0.1:8000 |
| Staging | Your staging Render/Railway URL |
| Production | https://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.
| Setting | Value |
|---|---|
| Event name | verdict (must match Actor.charge in main.js) |
| Recommended list price | $0.01 per verdict |
| Primary event | verdict |
| Free allowance | Optional 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.
- Faro (Render
faro-apionly) — add a dedicated Actor key toFARO_API_KEYSand the same value toFARO_LICENCE_CLEAN_API_KEYS. Do not put it onfaro-mcp. LeaveX402_PAYWALL_ENABLED=false. - Apify secrets — Settings → Environment variables: secret
FARO_API_KEY, optionalFARO_HOST(https://api.faro.devorhttps://api.farofinance.app). - Billing + PPE + Store — complete payout billing at Publication (required), then run:
Sets$cd apify-actor && node scripts/configure-store.mjsverdict@ $0.01 (primary), public listing, categories AI / DEVELOPER_TOOLS / AUTOMATION. - Smoke — Run
{"type":"url","value":"https://example.com"}(matches input-schemaprefillused by Store QA; then payee + message). Confirm one dataset item, oneverdictcharge, no charge on bad input (Actor.fail). Keep prefills so daily Store QA stays green. - MCP pin (optional) —
https://mcp.apify.com?tools=vednux/faro-verify
Deploy source updates with:
cd apify-actorapify push
Step-by-step founder notes: ./PUBLISH.md.
Local development
cd apify-actornpm install# Create apify-actor/storage/key_value_stores/default/INPUT.json:# { "type": "url", "value": "https://example.com" }export FARO_API_KEY=your-faro-keyexport FARO_HOST=http://127.0.0.1:8000 # optionalapify 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, beforeActor.pushData. Actor.chargereturns aChargeResult; checkeventChargeLimitReachedin high-volume Actors.- Local PPE testing:
ACTOR_TEST_PAY_PER_EVENT=true(optionalACTOR_USE_CHARGING_LOG_DATASET=truefor 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
