Wayback Machine Raw Content with id Modifier
SkillWeb & browsingFix JSON parse errors when fetching archived API responses from Wayback Machine. Use when: (1) Getting "Expecting value: line 1 column 1 (char 0)" JSON decode errors from archived URLs, (2) Wayback returns HTML instead of expected JSON/raw content, (3) Crawling archived REST APIs or JSON endpoints from web.archive.org. The `id_` modifier returns raw content without the Wayback toolbar wrapper.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Wayback Machine Raw Content with id Modifier skill
What this skill tells your AI
The instructions your AI receives, as published by divinevideo/divine-mobile in .agents/skills/wayback-machine-raw-content-id-modifier/SKILL.md and read by ahel’s review.
Problem
When fetching archived JSON API endpoints from the Wayback Machine, you get HTML-wrapped
content with the Wayback toolbar instead of the raw JSON response. This causes JSON parse
errors like "Expecting value: line 1 column 1 (char 0)" because the response starts with
<!DOCTYPE html> instead of valid JSON.
Context / Trigger Conditions
- Fetching archived API endpoints from
web.archive.org/web/{timestamp}/{url} - JSON parsing fails with "Expecting value: line 1 column 1 (char 0)"
- Response content starts with HTML instead of expected JSON
- Crawling archived REST APIs, JSON feeds, or any non-HTML content from Wayback
- Using Python
json.loads(),response.json(), or similar JSON parsing
Solution
Add id_ after the timestamp in the Wayback URL to get raw content:
Default (HTML-wrapped):
https://web.archive.org/web/20170112012313/https://vine.co/api/users/profiles/123
Raw content (add id_):
https://web.archive.org/web/20170112012313id_/https://vine.co/api/users/profiles/123
Code Fix Pattern
# BEFORE (broken - returns HTML)
url = f"https://web.archive.org/web/{timestamp}/https://example.com/api/data"
# AFTER (works - returns raw JSON)
url = f"https://web.archive.org/web/{timestamp}id_/https://example.com/api/data"
Other Wayback Modifiers
id_- Raw/identity (no modifications, returns original content)if_- Iframe embed modejs_- JavaScript rewriting modecs_- CSS rewriting modeim_- Image mode
Verification
-
Test the URL with curl to see actual response:
# Without id_ - shows HTML with Wayback toolbar curl -s "https://web.archive.org/web/20170112012313/https://example.com/api/data" | head -5 # With id_ - shows raw JSON curl -s "https://web.archive.org/web/20170112012313id_/https://example.com/api/data" | head -5 -
Verify JSON parsing works:
import json import urllib.request url = f"https://web.archive.org/web/{timestamp}id_/{api_url}" with urllib.request.urlopen(url) as resp: data = json.loads(resp.read()) # Should work now
Example
Crawling archived Vine API profiles:
WAYBACK_BASE = "https://web.archive.org/web"
def fetch_profile(user_id: str, timestamp: str):
# Use id_ modifier to get raw JSON instead of HTML-wrapped content
url = f"{WAYBACK_BASE}/{timestamp}id_/https://vine.co/api/users/profiles/{user_id}"
with urllib.request.urlopen(url) as resp:
data = json.loads(resp.read())
return data['data'] # Now works correctly
Notes
- The
id_modifier works for any content type, not just JSON (images, CSS, JS, etc.) - Some archived content may still fail if it was never properly captured
- CDX API queries (for finding archived URLs) don't need the modifier
- Rate limit requests to archive.org (5+ seconds between requests recommended)
- Empty responses (0 bytes) indicate the archive entry exists but content wasn't captured
References
Signals
- GitHub stars
- 265
- Forks
- 55
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
wayback-machine-raw-content-id-modifier- Source
- github.com/divinevideo/divine-mobile