Base URL: https://pwaregistry.org. There is no signup.
1. Get one PWA
const response = await fetch(
"https://pwaregistry.org/api/v1/apps/squoosh.app",
);
const app = await response.json();
console.log(app.application.name);
console.log(app.application.icons.primary);
console.log(app.application.screenshots.narrow);
The same record is also a static file:
https://pwaregistry.org/registry/v1/apps/squoosh.app.json
Replace squoosh.app with any registry id (the hostname, lowercased).
2. The fields you will use most
The record has two layers:
- Top level —
id,domain,status, timestamps. application— the normalized PWA metadata (name, description, icons, screenshots, categories).
| What you want | Field |
|---|---|
| App name | app.application.name |
| Description | app.application.description |
| Domain | app.domain |
| Status | app.status |
| Categories | app.application.categories |
| Primary icon | app.application.icons.primary |
| Mobile screenshots | app.application.screenshots.narrow |
| Desktop screenshots | app.application.screenshots.wide |
| Launch URL | app.application.startUrl |
If a field is null or [], the website did not publish that member (or the image was not reachable). PWARegistry does not invent a substitute.
3. Example response (abridged)
This is a real record shape, shortened:
{
"id": "squoosh.app",
"status": "ACTIVE",
"domain": "squoosh.app",
"application": {
"name": "Squoosh",
"description": "Compress and compare images with different codecs, right in your browser.",
"categories": ["photo", "productivity", "utilities"],
"startUrl": "https://squoosh.app/",
"icons": {
"primary": {
"src": "https://squoosh.app/c/icon-large-cb438cac.png",
"width": 1024,
"height": 1024
}
},
"screenshots": {
"narrow": [{ "src": "https://squoosh.app/c/screenshot1-0ff68546.png" }],
"wide": [{ "src": "https://squoosh.app/c/screenshot4-3a706c3c.png" }]
}
}
}
The full record also includes validation, capabilities, every reachable icon, and source notes (where the name and description were discovered). You can ignore those until you need them.
4. What you can do with the data
Show the name:
heading.textContent = app.application.name;
Show the description:
summary.textContent = app.application.description;
Show the primary icon:
const icon = app.application.icons.primary;
if (icon) img.src = icon.src;
Show mobile screenshots:
for (const shot of app.application.screenshots.narrow) {
// render shot.src
}
Show desktop screenshots:
for (const shot of app.application.screenshots.wide) {
// render shot.src
}
Check status:
if (app.status === "ACTIVE") show(app);
Next: Where the Data Lives if you need more than one app, or Build a PWA Store.