# Rug Pull Risk Scorer (`zinin/rug-pull-scorer`) Actor

Normalize authorized or licensed token risk records into provenance-linked review rows with stable identity, freshness, visible gaps, human actions, and current-run settlement. Zero external source requests or automated business decisions.

- **URL**: https://apify.com/zinin/rug-pull-scorer.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 1,000 normalized token risk records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Authorized Token Risk Evidence Normalizer

Normalize token risk records that you own or are authorized or licensed to use. Get stable IDs, explicit provenance, freshness, confidence gaps, conservative review actions, and exact current-run Dataset/PPE reconciliation without contacting any marketplace, publisher, employer, blockchain provider, portal, or other external source.

**Commercial unit:** one delivered normalized token risk record. Actor start is separate. Legacy inputs, invalid records, and duplicates can produce free diagnostics.

![Authorized Token Risk Evidence Normalizer: authorized input to review-ready evidence](https://raw.githubusercontent.com/TimmyZinin/apify-actor-assets/cf7394bb8c185909f6068f12f5b66388bfa90d6e/commercial115/rug-pull-scorer/readme-hero.webp)

### What you get

- one stable normalized row per accepted unique record;
- the familiar legacy top-level fields needed by existing exports;
- explicit source name, URL, licence statement, retrieval time, and changes made;
- freshness, change boundary, confidence score and visible gaps;
- a human-review decision with `safeToAutomate=false`;
- settlement-neutral Dataset billing intent;
- authoritative current-run KVS `OUTPUT` with exact named-event counters;
- free migration, validation, and duplicate diagnostics;
- zero source, browser, proxy, DNS, provider, or child-Actor requests.

### Who uses it

Operations analysts, data teams, compliance reviewers, marketplace operators, research teams, and automation builders use this Actor after they already possess a lawful structured export. It is not a collector, crawler, verification provider, financial adviser, employment decision engine, valuation service, or source of legal permission.

### Evidence-to-action workflow

![Authorized Token Risk Evidence Normalizer: rights to settlement workflow](https://raw.githubusercontent.com/TimmyZinin/apify-actor-assets/cf7394bb8c185909f6068f12f5b66388bfa90d6e/commercial115/rug-pull-scorer/readme-workflow.webp)

1. Obtain a buyer-owned, authorized, or licensed export.
2. Keep credentials and unnecessary personal data out of the payload.
3. Submit bounded records with source and licence context.
4. Validate the closed contract and suppress duplicates before billing.
5. Normalize deterministic fields without fetching or inference.
6. Deliver each accepted row with linked `result-found`.
7. Reconcile named counter +1 and aggregate receipt.
8. Persist current-run `OUTPUT` and route every decision to a human.

### How to run

```json
{
  "schemaVersion": "2.0",
  "authorization": "I confirm I may process and commercially use these submitted records.",
  "sourceContext": "buyer_owned_export",
  "batchName": "rug-pull-scorer-evidence-review",
  "freshnessHours": 168,
  "records": [
    {
      "sourceRecordId": "demo-token-001",
      "title": "Example token risk evidence",
      "summary": "Submitted risk observations normalized for analyst review; not investment advice.",
      "entityName": "0x0000000000000000000000000000000000000001",
      "category": "token-risk",
      "occurredAt": "2026-08-01T10:00:00.000Z",
      "url": "https://exports.example.com/token/demo-001",
      "sourceName": "Licensed token risk export",
      "sourceUrl": "https://exports.example.com/token",
      "sourceLicense": "Buyer confirms commercial processing rights for the submitted evidence.",
      "sourceRetrievedAt": "2026-08-01T10:00:00.000Z",
      "changesMade": "Numeric values normalized; no on-chain or provider request made.",
      "attributes": {
        "token": "0x0000000000000000000000000000000000000001",
        "symbol": "DEMO",
        "riskLabel": "review",
        "riskScore": 55,
        "isHoneypot": null,
        "confidence": "buyer_asserted",
        "buyTax": null,
        "sellTax": null,
        "liquidityUsd": 250000,
        "checksSkipped": [
          "live_simulation"
        ],
        "riskFlags": [
          "source_not_verified"
        ]
      }
    }
  ]
}
```

#### Legacy migration mode

The historical input remains accepted:

```json
{
  "tokens": [
    "0x0000000000000000000000000000000000000001"
  ],
  "chainId": 1,
  "maxConcurrency": 1
}
```

It performs no old source request. Instead, one free diagnostic explains how to move to `records`. This keeps old Tasks observable and operational without silently continuing an unauthorized or unreliable fetch path.

### Input contract

- `authorization` is an explicit buyer confirmation, not independent legal proof.
- `sourceContext` separates owned, owner-authorized, licensed-feed, and other authorized exports.
- `records` contains 1–100 bounded objects.
- `sourceRecordId` plus `sourceName` forms the duplicate key.
- URLs must be credential-free HTTPS with no fragment or custom port.
- `sourceRetrievedAt` is buyer-supplied and drives freshness.
- `sourceLicense` and `changesMade` travel with every row.
- Unknown properties fail closed; invalid rows become explicit free diagnostics when other valid work exists.

### Pricing

The paid unit is one delivered normalized authorized record. Actor start is separate. The live Apify pricing panel is authoritative for the current tier. Legacy, invalid, and duplicate diagnostics emit no `result-found`.

### Happy, partial, and failure output

| Outcome | Dataset | `result-found` | Meaning |
|---|---:|---:|---|
| accepted unique record, exact settlement | one row | +1 | paid result |
| legacy migration diagnostic | one row | 0 | free guidance |
| invalid or duplicate diagnostic | one row | 0 | free quality evidence |
| budget stop before push | none | 0 | withheld work |
| push returned but counter unreadable | known when receipt proves write | unknown | reconcile |
| push threw | unknown | unknown | no blind retry |

Dataset fields describe candidate evidence and billing intent. Only current-run KVS `OUTPUT` is authoritative for paid/free/withheld/unknown settlement. Every new run incurs a new start event and can produce new paid rows; `replaySafe=false` after any push attempt.

Illustrative accepted run binding:

```json
{"runId":"RUN_ID_FROM_PLATFORM","buildId":"BUILD_ID_FROM_RUN","status":"SUCCEEDED","evidenceAccepted":true,"datasetRows":1,"resultFoundDelta":1}
```

Illustrative reconciled review binding:

```json
{"runId":"RUN_ID_FROM_PLATFORM","buildId":"BUILD_ID_FROM_RUN","status":"SUCCEEDED","evidenceAccepted":true,"outputRecord":"OUTPUT","replaySafe":false}
```

### Field dictionary

#### `recordType`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `stableId`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `found`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sourceRecordId`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `title`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `summary`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `entityName`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `category`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `occurredAt`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `url`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `attributes`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `token`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `symbol`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `riskLabel`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `riskScore`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `isHoneypot`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `confidence`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `buyTax`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sellTax`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `liquidityUsd`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `checksSkipped`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `riskFlags`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sourceName`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sourceUrl`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sourceLicense`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `sourceRetrievedAt`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `changesMade`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `observedAt`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `freshness`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `change`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `decisionConfidence`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `evidence`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `decision`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `recommendedAction`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `priority`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `safeToAutomate`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `failureDiagnostics`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `billing`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

#### `rowDigest`

This field is part of the closed review contract. Preserve it with the current run ID, source context, observation time, and row digest. A missing value means unknown or not supplied; never coerce it into a business conclusion. Before downstream use, compare it with `evidence`, `decisionConfidence.gaps`, and the authoritative KVS `OUTPUT` settlement.

### Evidence and boundaries

Submitted evidence is structurally validated but not externally verified. Freshness measures time since the buyer-supplied retrieval time. Confidence measures contract completeness and visible gaps, not factual truth or predicted outcome.

### Sources and rights

This Actor contacts no external source. You must have the right to submit, process, retain, and commercially use every record and every embedded field. Public accessibility alone does not prove redistribution rights. Do not submit cookies, API keys, signed URLs, credentials, private notes, unnecessary personal data, sensitive classifications, or secrets. Configure Dataset/KVS retention and access controls. Hashes are integrity aids, not anonymization.

For Token risk evidence, treat identity, availability, completeness, accuracy, legal status, commercial relevance, and future outcomes as unverified unless a separate authorized process proves them. Never infer protected traits, intent, guilt, financial suitability, employment suitability, property value, token safety, or causality from a normalized row.

### Decision routing

The only successful decision is `review_required`. Its recommended action is to review evidence, licence, freshness, and gaps. The Actor never sends messages, changes campaigns, buys or sells assets, ranks people, makes hiring decisions, edits source records, or publishes allegations. Keep human approval and an audit trail before any external action.

### Commercial playbooks

#### 1. analyst review queue

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 2. warehouse ingestion

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 3. CRM staging

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 4. scheduled batch review

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 5. webhook routing

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 6. n8n workflow

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 7. Make scenario

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 8. Zapier handoff

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 9. MCP tool call

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 10. data-quality audit

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 11. licence review

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

#### 12. retention review

Read KVS `OUTPUT` first, require the current `runId`, then read Dataset rows. Route `review_required` to a human with source licence, gaps, freshness, and row digest attached. Never treat `safeToAutomate=false` as permission to message, trade, publish, score a person, change a listing, or modify an external system. If delivery or settlement is unknown, reconcile the original run; do not rerun blindly.

### Integration recipes

Use API, Tasks, schedules, webhooks, n8n, Make, Zapier, or an Apify MCP integration only as transport. Always read current-run KVS `OUTPUT` before Dataset rows.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/zinin~rug-pull-scorer/runs?token=$APIFY_TOKEN" \
+  -H "Content-Type: application/json" \
+  --data-binary @input.json
```

After terminal completion, read `OUTPUT` from the default Key-Value Store and verify its `runId`, status, delivery counters, errors, replay state, and terminal writes before consuming Dataset rows.

### Operating guide

- Confirm source rights and purpose before every batch.
- Keep record identity stable and source-specific.
- Review stale timestamps and missing optional evidence.
- Treat duplicate suppression as an input fact, not proof of source uniqueness.
- Check budget before expecting all records to be delivered.
- Reconcile the original run after any unknown delivery or settlement.
- Never retry a possibly delivered paid row blindly.
- Retain KVS and Dataset under the same access and deletion policy.
- Review every action because `safeToAutomate=false`.
- Use the live Apify pricing panel as the current price authority.

### FAQ

#### 1. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 2. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 3. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 4. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 5. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 6. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 7. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 8. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 9. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 10. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 11. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 12. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 13. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 14. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 15. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 16. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 17. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

#### 18. Can this Actor verify submitted token risk record facts?

No. It validates structure, normalizes bounded values, records buyer-asserted provenance, calculates deterministic digests, exposes freshness and gaps, and settles one delivered row. It makes zero external requests. Verification requires a separate authorized source workflow and human review.

### Contract summary

The product is intentionally narrow: normalize authorized structured evidence, preserve provenance and familiar fields, expose uncertainty, deliver one bounded paid row per accepted unique input, and record exact current-run settlement. Collection, external verification, enrichment, adjudication, and automatic business action remain outside the Actor.

# Actor input Schema

## `schemaVersion` (type: `string`):

Use the current closed input contract version.

## `authorization` (type: `string`):

Confirm that you may process and commercially use every submitted record.

## `sourceContext` (type: `string`):

Describe why the structured export is authorized for this processing.

## `batchName` (type: `string`):

Choose a non-sensitive label for this evidence-review batch.

## `freshnessHours` (type: `integer`):

Mark evidence older than this threshold as stale for human review.

## `records` (type: `array`):

Submit bounded structured records with stable identity, provenance, licence context, and changes made.

## `tokens` (type: `array`):

Retained for compatibility. No source request is made; this mode emits one free migration diagnostic.

## `chainId` (type: `integer`):

Retained for compatibility. No source request is made; this mode emits one free migration diagnostic.

## `maxConcurrency` (type: `integer`):

Retained for compatibility. No source request is made; this mode emits one free migration diagnostic.

## Actor input object example

```json
{
  "schemaVersion": "2.0",
  "authorization": "I confirm I may process and commercially use these submitted records.",
  "sourceContext": "buyer_owned_export",
  "batchName": "rug-pull-scorer-evidence-review",
  "freshnessHours": 168,
  "records": [
    {
      "sourceRecordId": "demo-token-001",
      "title": "Example token risk evidence",
      "summary": "Submitted risk observations normalized for analyst review; not investment advice.",
      "entityName": "0x0000000000000000000000000000000000000001",
      "category": "token-risk",
      "occurredAt": "2026-08-01T10:00:00.000Z",
      "url": "https://exports.example.com/token/demo-001",
      "sourceName": "Licensed token risk export",
      "sourceUrl": "https://exports.example.com/token",
      "sourceLicense": "Buyer confirms commercial processing rights for the submitted evidence.",
      "sourceRetrievedAt": "2026-08-01T10:00:00.000Z",
      "changesMade": "Numeric values normalized; no on-chain or provider request made.",
      "attributes": {
        "token": "0x0000000000000000000000000000000000000001",
        "symbol": "DEMO",
        "riskLabel": "review",
        "riskScore": 55,
        "isHoneypot": null,
        "confidence": "buyer_asserted",
        "buyTax": null,
        "sellTax": null,
        "liquidityUsd": 250000,
        "checksSkipped": [
          "live_simulation"
        ],
        "riskFlags": [
          "source_not_verified"
        ]
      }
    }
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `OUTPUT` (type: `string`):

No description

## `receipt` (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("zinin/rug-pull-scorer").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("zinin/rug-pull-scorer").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 zinin/rug-pull-scorer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zinin/rug-pull-scorer"
        }
    }
}

```

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/zt94tJY8KdqEcDWiS/builds/rLBHgfuff8pM2dIcW/openapi.json
