Not in the top 1,000 by GitHub stars
alixrezax/appstore-screenshot-fetcher
Agent skill + no-dependency Python script to fetch every App Store screenshot at full resolution, by device, including iPhone Duo. Install: npx skills add alixrezax/appstore-screenshot-fetcher
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/appstore-screenshot-fetcher/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 21bc29f0b3a2
No earlier version was observed for comparison.
Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- appstore-screenshot-fetcher
skills/appstore-screenshot-fetcher
How it works
appstore-screenshot-fetcher
When your agent uses it
Fetch the screenshots an app has published on its Apple App Store listing, at full resolution and for every device size (iPhone 6.9"/6.5"/6.3", iPhone Duo foldable inner and outer displays, iPad, Apple Watch, Mac, Apple TV, Vision Pro). Use this whenever someone wants to download, inspect, compare or audit another app's (or their own) App Store screenshots, check whether a listing has iPhone Duo or a particular device size, do competitor or ASO research on store screenshots, or scan many apps for which sizes they've uploaded, even when they only paste an apps.apple.com link or name an app. Not for designing or generating new marketing screenshots.
What it loads into context
Frontmatter
156 tokensAlways available to the agent
SKILL.md
1,592 tokensWhen the skill is activated
Reference documents
1,224 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Why this approach
- Quick start
- iPhone Duo in one paragraph
- Other media types
- Checking many apps
- Storefronts and languages
- Reporting results
Scripts executed separately
scripts/fetch_screenshots.py
Files
SKILL.mdcore6,389 bytesSKILL.mdcore6,389 bytesreferences/media-types.mddoc3,664 bytesscripts/fetch_screenshots.pyruns10,449 bytes
Read SKILL.md
# App Store screenshot fetcher
Get the real, full-resolution screenshots from any public App Store listing, grouped by
device size, including iPhone Duo.
## Why this approach
The obvious sources come up short:
- The **iTunes Lookup API** (`itunes.apple.com/lookup`), which most GitHub scrapers use
(for example `facundoolano/app-store-scraper`), returns one iPhone set and one iPad set at
low resolution, and never iPhone Duo.
- The **apps.apple.com web page** shows only one iPhone size, and its code doesn't know about
Duo, so Duo shots never appear there.View the complete source on GitHubSkills included
- appstore-screenshot-fetcher
Repository facts
- License
- MIT
- Created
- Oct 19, 2026
- Last pushed
- Oct 19, 2026
- Forks
- 1
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 1 note
skills/appstore-screenshot-fetcher/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- No hidden or obfuscated text
- No instruction overrides
- 1 executable scriptin 1 file: appstore-screenshot-fetcher/scripts/fetch_screenshots.py:1
- No access to secrets
- No requests to vote in Hot
Show all 26 signals by file
skills/appstore-screenshot-fetcher/SKILL.md
- Network accessline 21
The App Store website loads its data from a tokenless JSON proxy, `https://apps.apple.com/api/apps/v1/catalog/{country}/apps/{id}?extend=customScreenshotsByType`, - Network accessline 22
`https://apps.apple.com/api/apps/v1/catalog/{country}/apps/{id}?extend=customScreenshotsByType`, - Network accessline 33
# What does this listing have? (no downloads) python3 <skill>/scripts/fetch_screenshots.py "https://apps.apple.com/ca/app/deliveries/id290986013" - Network accessline 34
python3 <skill>/scripts/fetch_screenshots.py "https://apps.apple.com/ca/app/deliveries/id290986013" - Network accessline 90
1. Get IDs from the iTunes Search/Lookup API. A developer's catalog is at `https://itunes.apple.com/lookup?id=<artistId>&entity=software&limit=200`. Its results - Network accessline 91
`https://itunes.apple.com/lookup?id=<artistId>&entity=software&limit=200`. Its results
skills/appstore-screenshot-fetcher/references/media-types.md
- Network accessline 75
"customScreenshotsByType": { "cassatt": [{"width": 1398, "height": 2034, "hasP3": false, "bgColor": "000000", "url": "https://is1-ssl.mzstatic.com/image/thumb/.../{w}x{h}{c}.{f}"}], - Network accessline 76
"cassatt": [{"width": 1398, "height": 2034, "hasP3": false, "bgColor": "000000", "url": "https://is1-ssl.mzstatic.com/image/thumb/.../{w}x{h}{c}.{f}"}], "iphone_d74": ["..."] - Network accessline 77
"url": "https://is1-ssl.mzstatic.com/image/thumb/.../{w}x{h}{c}.{f}"}],
skills/appstore-screenshot-fetcher/scripts/fetch_screenshots.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 4
Uses the tokenless JSON endpoint the apps.apple.com website itself calls: https://apps.apple.com/api/apps/v1/catalog/{country}/apps/{id}?extend=customScreenshotsByType - Network accessline 5
https://apps.apple.com/api/apps/v1/catalog/{country}/apps/{id}?extend=customScreenshotsByType - Network accessline 31
CATALOG = "https://apps.apple.com/api/apps/v1/catalog/{country}/apps/{app_id}" - Network accessline 32
SEARCH = "https://itunes.apple.com/search" - Network accessline 34
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 " "(KHTML, like Gecko) Version/18.0 Safari/605.1.15", "Origin": "https://apps.apple.com", - Network accessline 35
"(KHTML, like Gecko) Version/18.0 Safari/605.1.15", "Origin": "https://apps.apple.com", "Referer": "https://apps.apple.com/", - Network accessline 36
"Origin": "https://apps.apple.com", - Network accessline 37
"Referer": "https://apps.apple.com/", - Network accessline 65
for attempt in range(retries): try: req = urllib.request.Request(url, headers=HEADERS) - Network accessline 66
try: req = urllib.request.Request(url, headers=HEADERS) with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 67
req = urllib.request.Request(url, headers=HEADERS) - Network accessline 68
with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 102
def fetch(app_id, country="us", lang="en-US"): - Network accessline 201
try: app_id, country = resolve(app, args.country) info = fetch(app_id, country, args.lang) - Network accessline 202
app_id, country = resolve(app, args.country) info = fetch(app_id, country, args.lang) except NotFound as e: - Network accessline 203
info = fetch(app_id, country, args.lang)
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Signal confidence: 26 facts
- Network access in prose of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:21Low confidence
- Network access in prose of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:22Low confidence
- Network access in code of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:33High confidence
- Network access in code of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:34High confidence
- Network access in prose of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:90Low confidence
- Network access in prose of the SKILL.mdappstore-screenshot-fetcher/SKILL.md:91Low confidence
- Network access in code of documentationappstore-screenshot-fetcher/references/media-types.md:75Low confidence
- Network access in code of documentationappstore-screenshot-fetcher/references/media-types.md:76Low confidence
- Network access in code of documentationappstore-screenshot-fetcher/references/media-types.md:77Low confidence
- Executable script in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:1High confidence
- Network access in prose of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:4Low confidence
- Network access in prose of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:5Low confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:31High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:32High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:34High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:35High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:36High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:37High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:65High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:66High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:67High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:68High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:102High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:201High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:202High confidence
- Network access in code of a file that runsappstore-screenshot-fetcher/scripts/fetch_screenshots.py:203High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/appstore-screenshot-fetcher/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.