Scam Archive API
A free, read-only JSON API for accessing the Scam Archive database. No authentication required.
All endpoints return application/json.
https://scamarchive.org Scams
/api/scams List and search all scams. Supports filtering, sorting, and pagination.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
q | string | Search across title, description, category, channels, and tags. |
channel | string | Filter by delivery channel. e.g. "email", "sms". |
category | string | Filter by scam category. e.g. "phishing". |
verified | "true" | "false" | Filter by verification status. |
sort | "az" | "recent" | "reports" | "risk" | Sort order. Defaults to "az". |
limit | number | Max results to return. Omit for all. |
offset | number | Pagination offset. Defaults to 0. |
Example Request
GET https://scamarchive.org/api/scams?q=paypal&sort=recent&limit=5
Response Shape
{
"meta": {
"total": 42,
"returned": 5,
"offset": 0,
"limit": 5,
"query": { "q": "paypal", "sort": "recent", ... }
},
"filters": {
"categories": ["phishing", "refund-invoice", ...],
"channels": ["Email", "SMS/Text", ...]
},
"rows": [
{
"id": "paypal-invoice-scam",
"title": "PayPal Invoice Scam",
"desc": "...",
"category": "phishing",
"channels": ["Email"],
"risk": "High",
"verified": false,
"variationsCount": 4,
"reports": 0,
"lastSeen": "2025-11-01T00:00:00.000Z",
"hero": "/images/paypal-invoice-scam/...",
"tags": ["PayPal", "Invoice", ...]
}
]
} /api/scams/{id}.json Retrieve a single scam and all its variations by scam ID (slug).
Path Parameters
| Parameter | Description |
|---|---|
id | The scam slug, e.g. paypal-invoice-scam |
Example Request
GET https://scamarchive.org/api/scams/paypal-invoice-scam.json
Response Shape
{
"post": {
"id": "paypal-invoice-scam",
"slug": "paypal-invoice-scam",
"data": {
"scamName": "PayPal Invoice Scam",
"category": "phishing",
"severity": "High",
"description": "...",
"howItWorks": [...],
"dos": [...],
"donts": [...],
"tags": [...]
}
},
"variations": [
{
"id": "paypal-invoice-scam/armory",
"title": "Armory PayPal Invoice",
"channel": "Email",
"dateObserved": "2025-10-01",
"images": ["/images/paypal-invoice-scam/armory.png"],
"navigation": "/scams/paypal-invoice-scam/armory"
}
]
} Variations
Each scam has one or more variations — specific real-world instances with their own screenshots, channel, and observed date.
/api/variations List and search all variations across every scam. Supports filtering by scam, channel, and severity.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
q | string | Search across title, description, scam name, and tags. |
scam | string | Filter by parent scam slug. e.g. paypal-invoice-scam |
channel | string | Filter by delivery channel. e.g. "email", "sms". |
severity | string | Filter by severity. e.g. "high". |
sort | "recent" | "az" | Sort order. Defaults to "recent". |
limit | number | Max results to return. Omit for all. |
offset | number | Pagination offset. Defaults to 0. |
Example Request
GET https://scamarchive.org/api/variations?scam=remote-job-offer-text-scam&sort=recent
Response Shape
{
"meta": {
"total": 8,
"returned": 8,
"offset": 0,
"limit": null,
"query": { "q": "", "scam": "remote-job-offer-text-scam", "channel": "", "severity": "", "sort": "recent" }
},
"rows": [
{
"id": "remote-job-offer-text-scam/robert-half",
"scamSlug": "remote-job-offer-text-scam",
"variationSlug": "robert-half",
"scamName": "Remote Job Offer Text Scam",
"title": "Robert Half text job offer $250-$500/day",
"description": "...",
"channel": "SMS (iMessage)",
"dateObserved": "2025-10-13",
"severity": "High",
"images": ["/images/remote-job-offer-text-scam/robert-half-team.png"],
"tags": ["Robert Half", "Remote Job", "SMS"],
"associations": ["+1 (202) 651-1350"],
"url": "/scams/remote-job-offer-text-scam/robert-half"
}
]
} Identifiers
Identifiers are phone numbers, email addresses, domains, and other IOCs (indicators of compromise) extracted from scam variations.
/api/identifiers List and search all identifiers with appearance counts and category breakdowns.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
q | string | Search across value, kind, and top categories. |
kind | string | Filter by identifier type. e.g. "phone", "email", "domain". |
category | string | Filter by scam category the identifier appears in. |
min | number | Minimum number of appearances. Defaults to 0. |
sort | "appearances" | "kind" | "az" | Sort order. Defaults to "appearances". |
limit | number (1–500) | Max results. Defaults to 100. |
offset | number | Pagination offset. Defaults to 0. |
Example Request
GET https://scamarchive.org/api/identifiers?kind=phone&min=2&sort=appearances
Response Shape
{
"meta": {
"total": 38,
"returned": 10,
"offset": 0,
"limit": 100,
"query": { "q": "", "kind": "phone", "min": 2, "sort": "appearances" }
},
"rows": [
{
"kind": "phone",
"value": "+1 (202) 651-1350",
"normalized": "+12026511350",
"slug": "+12026511350",
"summary": {
"appearances": 3,
"top": [
{ "name": "phishing", "count": 2 },
{ "name": "investment", "count": 1 }
],
"more": 0
}
}
]
} /api/identifiers/{slug} Look up a specific identifier. Returns full appearance history and co-occurring identifiers seen in the same scams.
Path Parameters
| Parameter | Description |
|---|---|
slug | Normalized identifier slug from the list endpoint, e.g. +12026511350 |
Query Parameters
| Parameter | Default | Description |
|---|---|---|
co | 1 | Include co-occurrences. Set to 0 to omit. |
apps | 1 | Include appearance list. Set to 0 to omit. |
Example Request
GET https://scamarchive.org/api/identifiers/+12026511350
Response Shape
{
"identifier": {
"kind": "phone",
"value": "+1 (202) 651-1350",
"normalized": "+12026511350",
"slug": "+12026511350"
},
"stats": {
"appearancesCount": 2,
"firstSeen": "2025-10-13",
"lastSeen": "2025-10-13"
},
"appearances": [
{
"scamId": "remote-job-offer-text-scam",
"variationSlug": "robert-half",
"scamName": "Remote Job Offer Text Scam",
"url": "/scams/remote-job-offer-text-scam/robert-half",
"channel": "SMS (iMessage)",
"firstSeen": "2025-10-13",
"lastSeen": "2025-10-13",
"primaryImage": "/images/...",
"excerpt": "..."
}
],
"cooccurrences": [
{
"kind": "phone",
"value": "+63 951 926 0696",
"normalized": "+639519260696",
"count": 1,
"url": "/identifiers/+639519260696"
}
]
} Notes
- • All endpoints are read-only. No API key is required.
- • Responses are cached between 60 seconds and 5 minutes. Build with that in mind.
- •
/api/scams/{id}.jsonis statically generated at build time./api/scamsand the identifier endpoints are server-rendered. - • If you build something with this API, we'd love to know — reach out via the report page.