L logiover
data · Jul 9, 2026 · 7 min read

How to Scrape Openverse for CC Images & Audio in 2026

Pull Creative Commons images and audio from Openverse's public API: title, creator, license, URL, tags, dimensions and attribution. No API key, at scale.

If you need openly licensed media in bulk — a training set of CC0 landscape photos, a library of attributable images for a CMS, or ambient CC audio for video production — Openverse is the largest single catalog to pull from, aggregating over 600 million Creative Commons items from Flickr, Wikimedia Commons, Rawpixel, Jamendo, and more. The catch is that the front-end search is built for browsing one page at a time, and the required attribution text isn’t something you want to hand-assemble across thousands of files. This guide covers what the Openverse API exposes, how its search endpoints are shaped, and how to pull clean, attribution-ready media records at scale.

What’s worth extracting

Each media item resolves to a flat record of about 15 fields. Grouped by purpose:

  • Identityid (Openverse UUID), title, and creator (author, photographer, or artist).
  • Licenselicense (the CC slug, e.g. by, by-sa, cc0) and licenseVersion (e.g. 2.0, 4.0).
  • Files & linksurl (direct media file), thumbnail (Openverse-hosted), and foreignLandingUrl (the original source page, e.g. the Flickr photo page).
  • Provenancesource and provider (e.g. flickr, wikimedia).
  • Content metadatatags (comma-separated), fileType, and for images, width and height in pixels.
  • Attributionattribution, a full pre-formatted CC credit sentence you can paste directly.

That last field is the one that saves the most manual work: rather than reconstructing “X by Y is licensed under CC Z” per file, the API hands you the complete attribution string ready to use.

How the source actually works

The scraper connects to the official Openverse API at https://api.openverse.org/v1/, using anonymous keyless queries against the /images/ and /audio/ search endpoints. Openverse aggregates and normalizes CC-licensed media from dozens of providers — Flickr, Wikimedia Commons, Rawpixel, Jamendo, ccMixter, the Free Music Archive, and more — so a single query reaches across all of them at once instead of forcing you to script each source’s own API separately. That normalization is the point: a Flickr photo and a Wikimedia image come back in the same 15-field shape, with license slugs and attribution strings already reconciled.

A single mode parameter selects the surface:

  • images — keyword search across CC photographs, illustrations, and vectors.
  • audio — keyword search across CC music, recordings, and sound effects (Jamendo, ccMixter, Free Music Archive, and others).
  • detail — fetch full metadata for one image by its UUID.

A typical search run, narrowed by license and source, looks like this:

{
  "mode": "images",
  "query": "ocean sunset",
  "license": "by",
  "source": "flickr",
  "maxResults": 500,
  "proxyConfig": { "useApifyProxy": true }
}

Two optional filters do most of the scoping work. license takes any Openverse license slug — by, by-sa, by-nc, by-nd, by-nc-sa, by-nc-nd, cc0, or pdm — and source restricts to a single provider like flickr or wikimedia. Combining them (e.g. source: wikimedia, license: cc0) is how you pull high-quality public-domain images specifically.

Because license and source are independent, you can scope a run tightly. Reusability-first projects usually want cc0 or by (the most permissive for commercial work); provenance-first projects pin a source they trust. Detail mode is for enrichment — if you already hold a list of UUIDs from another source, you resolve full metadata one item at a time:

{
  "mode": "detail",
  "imageId": "8dac0234-5511-43f8-bcc7-0c6c0c41c83d",
  "proxyConfig": { "useApifyProxy": true }
}

The actor paginates in batches of 100 with a 500ms delay between pages, walking results until it reaches your maxResults.

Open the Openverse Scraper on Apify — one run turns a keyword into hundreds of CC media records complete with license, source, dimensions and ready-to-paste attribution. No key, no login. Export to CSV, JSON or Excel.

The access reality

Openverse offers anonymous access to its full catalog, so the constraints are about politeness and metadata completeness, not anti-bot defenses:

  • No key required for anonymous access. The actor works out of the box against the public API. For very high volume, Openverse offers a free registered API key that raises limits, but you don’t need it to run.
  • Up to 10,000 results per query. maxResults caps at 10,000 per query. For broader coverage, run multiple queries with different keywords rather than trying to page one query further.
  • Polite pacing is built in. The actor uses a 500ms delay between pages to stay within anonymous rate limits, which keeps long-running jobs stable. That pacing sets the throughput: ~200 items in 2–3 seconds, ~1,000 items in roughly 15–20 seconds.
  • Provider metadata is uneven. fileType, width, and height can be null when the source doesn’t expose them; creator can be null for anonymous uploads. That’s the upstream data, not a scraper fault.
  • One mode per run. A single run handles either images or audio, not both — run the actor twice if you need both media types.

Example output

One image record:

{
  "id": "8dac0234-5511-43f8-bcc7-0c6c0c41c83d",
  "title": "Mountain landscape",
  "creator": "randihausken",
  "license": "by-sa",
  "licenseVersion": "2.0",
  "url": "https://live.staticflickr.com/6083/6036144711_e2c3f202c5_b.jpg",
  "thumbnail": "https://api.openverse.org/v1/images/8dac0234-5511-43f8-bcc7-0c6c0c41c83d/thumb/",
  "foreignLandingUrl": "https://www.flickr.com/photos/46406832@N00/6036144711",
  "source": "flickr",
  "provider": "flickr",
  "tags": "landscape, mountains, telemark",
  "width": "1024",
  "height": "682",
  "attribution": "\"Mountain landscape\" by randihausken is licensed under CC BY-SA 2.0."
}

Typical use cases

  • Computer-vision datasets — build a curated CC image set for model training (e.g. all CC0 landscape photos from Wikimedia).
  • Content-strategy research — monitor which keywords return the most results on Openverse to guide what to create.
  • Attributed galleries — automatically generate properly credited image galleries for a CMS or editorial platform using the attribution field.
  • License research — study the distribution of CC license types (BY, BY-SA, BY-NC, etc.) across the major media sources.
  • Audio sourcing — discover ambient music and sound effects under CC licenses for podcast or video production. Audio mode reaches Jamendo, ccMixter, and the Free Music Archive, so queries like ambient nature, jazz, or electronic surface usable tracks with the same license and attribution fields as images.
  • Cataloging & archival — pull bulk CC media metadata for recommendation systems or archival projects.

Across all of these the recurring win is the same: you get the media location plus the exact license obligation and a ready-to-use credit line in one row, so the compliance step that usually trips up bulk CC use is already done.

Build it yourself vs. use the actor

Openverse’s API is free and anonymous, so a first fetch is easy. The maintenance is in the plumbing: pagination across two endpoints, the 500ms polite-delay loop, license and source filter handling, assembling the attribution string, and normalizing partial records where dimensions or creator are missing. That’s a small client you’d own and keep working as the API evolves.

The actor packages that. Pricing is pay-per-result — a small fraction of a cent per item plus a negligible start fee — and the Openverse data is free. For a 500-image pull that’s a rounding-error cost, and the attribution formatting and pagination are already handled.

Common pitfalls

Specific gotchas with Openverse data:

  • Null dimensions and file types. For images from providers that don’t expose them, fileType, width, and height come back null. Don’t assume every image row has pixel dimensions.
  • License terms still apply. Every item carries real CC obligations. by-nc means non-commercial only; by-sa means share-alike. The attribution field gives you the credit text, but you must honor the specific license type for your use.
  • Specific queries return more. "jazz piano new orleans" returns more targeted results than a bare "music". Narrow queries beat broad ones for a usable set.
  • Combine source and license for quality. source: wikimedia with license: cc0 is a reliable path to high-quality public-domain images; a bare keyword mixes everything together.
  • Zero-result combinations happen. A niche keyword or a license+source pair with no indexed content returns nothing — the actor logs a warning and exits cleanly. Broaden the query or drop a filter.
  • URLs, not downloaded files. The actor returns url and thumbnail; downloading the actual files is out of scope but straightforward from those links.

Wrapping up

Openverse is the widest single door to openly licensed media, but the front-end is for browsing and the attribution work doesn’t scale by hand. If you need a one-off pull, the API is anonymous and worth scripting. If you need refreshed CC media metadata on a cadence — capturing newly indexed content, keeping an attribution-ready catalog current — let the actor own the pagination, polite pacing, and attribution formatting and hand you clean rows.

Run the Openverse Scraper on Apify — reads the official Openverse public API directly across images and audio: title, creator, license, dimensions, tags and full attribution text, up to 10,000 items per query. No API key, no login. Start on Apify’s free monthly credit.

Related guides