Openverse Scraper — CC Images, Audio & Media API
Pricing
from $1.50 / 1,000 results
Openverse Scraper — CC Images, Audio & Media API
Scrape Openverse by keyword, license, or media ID. Extract title, creator, license, URL, thumbnail, tags, dimensions for stock research, dataset building, and CC media discovery. No API key, no login.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Creative Commons images and audio from Openverse by keyword, license type, or media ID. Extract full metadata for stock research, AI training datasets, and CC media discovery — no API key required.
What does Openverse Scraper do?
Openverse Scraper connects to the official Openverse API — the world's largest catalog of openly licensed media, covering over 600 million Creative Commons images and audio tracks from sources like Flickr, Wikimedia Commons, Rawpixel, Jamendo, and more. The actor performs keyless anonymous queries against the /images/ and /audio/ search endpoints, pages through the results 20 at a time (Openverse's anonymous page size), and pushes clean structured records to Apify's dataset storage.
Three modes are available: images (keyword search across CC photographs, illustrations, and vectors), audio (keyword search across CC music, recordings, and sound effects), and detail (fetch full metadata for a single image by its UUID). Optional filters let you narrow results by license type (CC BY, CC0, CC BY-SA, etc.) or by source provider (flickr, wikimedia, rawpixel). Openverse's own search backend is slow for any query it has not answered recently (a page can take about a minute), so the Actor asks for several pages at once, starts a second and third attempt through other connections while the first is still waiting, and keeps whichever answer arrives first. Openverse also limits anonymous access to the first 240 results of every search (12 pages of 20); the Actor tells you when a run hit that limit.
Who is it for?
- Designers and content creators who need free-to-use images or audio for commercial and personal projects
- AI/ML researchers building training datasets of openly licensed visual or audio content
- Journalists and educators who need properly attributed CC media for publications
- Stock media analysts researching licensing trends, provider coverage, and keyword availability on open platforms
- Developers and data engineers who need bulk CC media metadata for cataloging, recommendation systems, or archival projects
Use cases
- Build a curated CC image dataset for computer vision model training (e.g., all CC0 landscape photos from Wikimedia)
- Monitor which keywords return the most results on Openverse to guide content creation strategy
- Automatically generate properly attributed image galleries for a CMS or editorial platform
- Research the distribution of CC license types (BY, BY-SA, BY-NC, etc.) across major media sources
- Discover ambient music and sound effects under CC licenses for podcast or video production
Why use Openverse Scraper?
- No API key required — anonymous access to the full Openverse catalog, no registration needed
- 19 structured fields per item — ID, title, creator, license, version, URL, thumbnail, source page, provider, tags, file type, dimensions, file size, audio duration/bit rate/sample rate, and ready-to-paste attribution text
- Built for a slow API — pages are fetched in parallel, slow attempts are raced against fresh ones, and results are written in page order with duplicates removed
- Honest limits — Openverse serves anonymous clients at most 240 results per search; the run's status message says so instead of promising more
- Three modes — images search, audio search, single-item detail fetch
- License and source filters — narrow to CC0 only, or to a specific source like Flickr or Wikimedia
- Export CSV, JSON, Excel — download results in any format via Apify dataset interface or API
- Pay-per-result pricing — only pay for the data you actually collect
What data can you extract?
The actor extracts the following 19 fields for every media item (audio-only fields are null for images, and any field a provider does not publish is null):
| Field | Type | Description |
|---|---|---|
| id | string | Openverse UUID for the media item |
| title | string | Title or filename of the media |
| creator | string | Author/photographer/artist name |
| license | string | CC license slug (e.g. by, by-sa, cc0) |
| licenseVersion | string | License version (e.g. 2.0, 4.0) |
| url | string | Direct URL to the media file |
| thumbnail | string | Openverse-hosted thumbnail URL |
| foreignLandingUrl | string | Original source page URL (e.g. Flickr page) |
| source | string | Source name (e.g. flickr, wikimedia) |
| provider | string | Provider name (usually same as source) |
| tags | string | Comma-separated tag list |
| fileType | string | File extension (jpg, png, mp3, etc.) when the provider reports it |
| width | number | Image width in pixels (images only) |
| height | number | Image height in pixels (images only) |
| fileSize | number | File size in bytes when the provider reports it |
| duration | number | Audio length in milliseconds (audio only) |
| bitRate | number | Audio bit rate (audio only, when reported) |
| sampleRate | number | Audio sample rate in Hz (audio only, when reported) |
| attribution | string | Full pre-formatted attribution sentence |
Example output:
{"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","fileType": null,"width": 1024,"height": 682,"fileSize": null,"duration": null,"bitRate": null,"sampleRate": null,"attribution": "\"Mountain landscape\" by randihausken is licensed under CC BY-SA 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/2.0/."}
How to use
Option A — Search by keyword (images or audio)
Set mode to images or audio, provide a query, optionally add license and source filters, and set maxResults for volume control.
{"mode": "images","query": "ocean sunset","license": "by","source": "flickr","maxResults": 240,"proxyConfiguration": { "useApifyProxy": true }}
Option B — Fetch a single image by ID (detail mode)
Set mode to detail and provide the Openverse image UUID as imageId.
{"mode": "detail","imageId": "8dac0234-5511-43f8-bcc7-0c6c0c41c83d","proxyConfiguration": { "useApifyProxy": true }}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | images | images, audio, or detail (one image by ID) |
| query | string | — | Search keyword(s); leave empty to browse a broad default listing (slower to answer than a keyword search) |
| imageId | string | — | Image UUID, detail mode only |
| license | string | — | CC license filter: cc0, pdm, by, by-sa, by-nc, by-nd, by-nc-sa, by-nc-nd |
| licenseType | string | — | Usage filter: commercial, modification, all, all-cc |
| source | string | — | Provider filter, e.g. flickr, wikimedia, jamendo, freesound |
| extension | string | — | File format filter: jpg, png, gif, svg, mp3, ogg, flac, wav, mid |
| maxResults | integer | 240 | Maximum items to return. Openverse serves anonymous clients at most 240 results per search, so higher values are capped at 240 |
| proxyConfiguration | object | Apify proxy | Proxy settings; the Actor races a direct connection against fresh proxy exits |
Full input example:
{"mode": "images","query": "jazz music","license": "cc0","source": "","maxResults": 1000,"proxyConfiguration": { "useApifyProxy": true }}
Output example
{"id": "041a3c2b-76e8-40cc-b10e-f91a53972be6","title": "Denali - Mountain Landscape from Alaska","creator": "blmiers2","license": "by-nc-sa","licenseVersion": "2.0","url": "https://live.staticflickr.com/7191/6904758951_6868a06560_b.jpg","thumbnail": "https://api.openverse.org/v1/images/041a3c2b-76e8-40cc-b10e-f91a53972be6/thumb/","foreignLandingUrl": "https://www.flickr.com/photos/41304517@N00/6904758951","source": "flickr","provider": "flickr","tags": "alaska, denali, glacier, ice, landscape, mountain, snow, travel, winter","fileType": null,"width": 1024,"height": 683,"fileSize": null,"duration": null,"bitRate": null,"sampleRate": null,"attribution": "\"Denali - Mountain Landscape from Alaska\" by blmiers2 is licensed under CC BY-NC-SA 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/2.0/."}
Tips for best results
- Use specific queries —
"jazz piano new orleans"returns more targeted results than just"music" - Filter by license type — use
cc0orbyfor maximum reusability in commercial projects - Combine source + license — e.g.
source: wikimedia, license: cc0for high-quality public domain images - Need more than 240 results? — split the search: run several queries, or add
license,sourceorextensionfilters; each search can return up to 240 results - Audio mode — try queries like
"ambient nature","jazz", or `"electronic" for Jamendo music tracks - Detail mode for enrichment — if you have a list of IDs from another source, use detail mode to fetch full metadata
- Export to CSV — use Apify's dataset download for spreadsheet-ready attribution lists
- Rate limits and slow answers — Openverse publishes anonymous limits of 20 requests per minute and 200 per day per client address, and answers new queries slowly; the Actor spreads its requests over several connections and retries, and the run's SUMMARY record lists every attempt
- Tag filtering — download the result set and filter by tags in Excel/Python for topical subsets
- Schedule runs — use Apify Scheduler to capture newly indexed CC media on a regular cadence
Integrations
Openverse Scraper outputs clean JSON to Apify's dataset storage, which integrates with:
- Google Sheets — connect via Apify's Google Sheets integration or export CSV
- Slack — receive notifications when a run completes via Apify Webhooks → Slack
- Zapier / Make — trigger workflows from new Openverse dataset items
- Webhooks — configure HTTP callbacks on run completion in Apify Console
- Scheduled runs — set up daily or weekly keyword monitoring via Apify Scheduler
API usage
cURL:
curl -X POST "https://api.apify.com/v2/acts/logiover~openverse-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"images","query":"mountain landscape","maxResults":240}'
Node.js (Apify client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('logiover~openverse-scraper').call({mode: 'images',query: 'mountain landscape',maxResults: 240,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover~openverse-scraper").call(run_input={"mode": "images","query": "mountain landscape","maxResults": 240,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["license"], item["url"])
Use with AI agents (MCP)
Openverse Scraper is available as a tool via the Apify MCP server. Connect Claude, GPT-4o, or any MCP-compatible AI agent and instruct it: "Find up to 240 CC BY-licensed images of ocean sunsets from Flickr and export them with their attribution text." The agent will invoke this actor, paginate the results, and return structured data ready for use in content pipelines, dataset curation, or automated attribution generation.
FAQ
Does this actor require an API key?
No. Openverse offers anonymous access to its public API. This actor works out of the box without any registration or credentials.
How many results can I extract per run?
Openverse serves anonymous clients at most 240 results (12 pages of 20) per search. The Actor returns up to 240 per run and says so in the run's status message. For broader coverage run several queries or add license, source and format filters — each combination is its own search.
What media sources does Openverse index?
Openverse indexes over 600 million items from sources including Flickr, Wikimedia Commons, Rawpixel, Jamendo, ccMixter, Free Music Archive, and many more. The source filter lets you restrict to a specific provider.
Why are some fields null?
Some providers don't supply all metadata. fileType, width, and height may be null for items where the source doesn't expose this data. The creator field may be null for anonymous uploads.
What happens if a query returns zero results?
The run finishes successfully with an explanatory status message ("Openverse returned no results for this search") and an empty dataset. This can happen with very niche or misspelled queries, or if a license+source combination has no indexed content. If Openverse itself cannot answer in time the run fails with a message instead, so an outage is never mistaken for an empty search.
Can I export results to Excel or CSV?
Yes. Open your dataset in Apify Console and click Export → choose CSV, Excel, or JSON. The attribution column provides ready-to-paste CC attribution text.
How fast does the actor run?
Openverse's search backend is the bottleneck, not the Actor: a query it has not answered recently can take close to a minute per page, while a popular query is served from its cache in about a second. Measured on 2026-10-31 on the Apify platform: 20 results of a cached query in about 30 seconds and of an uncached one in about 2 minutes; 160 results (8 pages) in 2 minutes 18 seconds; 60 audio results in 40 seconds. The Actor requests up to six pages at once, races several attempts per page and stops cleanly before the run's own timeout, keeping everything collected so far.
What CC license types can I filter by?
Use any Openverse license slug: by, by-sa, by-nc, by-nd, by-nc-sa, by-nc-nd, cc0, pdm. Leave blank to return all license types.
Is the data legal to use?
All items in Openverse carry a Creative Commons or equivalent open license. The attribution field provides the required credit text. Always read the specific license terms for commercial vs. non-commercial use restrictions.
How often is Openverse updated?
Openverse re-indexes sources continuously. New Flickr uploads and Wikimedia uploads appear within days to weeks. Schedule this actor weekly to capture freshly indexed CC content.
Can I scrape audio in the same run as images?
No — each run handles one mode. Run the actor twice with mode: images and mode: audio for both media types in the same workflow.
What are the related actors?
- Flickr Scraper — direct Flickr photo search and user gallery scraping
- Wikipedia Scraper — extract article text, images, and metadata from Wikimedia
- Bulk DNS Lookup — for domain research alongside media asset discovery
Is it legal?
Openverse indexes publicly available Creative Commons licensed content published by their respective authors under open licenses. This actor accesses the official Openverse public API in accordance with standard API usage practices. The output data carries existing CC license terms that must be respected when using the media. This actor does not circumvent any access controls or authentication. Users are responsible for complying with the specific Creative Commons license type (attribution, share-alike, non-commercial restrictions) of each item they use. See Openverse Terms of Service and Creative Commons licenses for details.
This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Openverse; Openverse and all other trademarks mentioned here are the property of their respective owners.
Related scrapers
- B2B Lead Scraper — find business contacts and company data by industry and country
- Bulk DNS Lookup — bulk domain and DNS record resolution
- Subdomain Finder — enumerate subdomains for any domain using certificate transparency
📝 Changelog
2026-11-01
- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to renamed Actors updated; independence disclaimer added.
2026-10-31 — version 1.1
- Fixed the failing automated quality check: Openverse's search backend now needs about a minute for queries it has not answered recently and returns HTTP 504 at 60 seconds, so the old one-page-at-a-time loop with 30-second timeouts could outlast the five-minute window. Pages are now fetched in parallel, every attempt gets the full 64 seconds, and further attempts through other connections start while the first one is still waiting.
- The time budget follows the run's real timeout; a run that cannot get any answer from Openverse now fails with a clear message instead of finishing empty.
- Honest limits: Openverse serves anonymous clients at most 240 results per search;
maxResultsabove 240 is capped and the status message says so (earlier versions of this page promised 10,000). - Prefilled input is small and uses a keyword (
nature, 20 results). - README: page size is 20,
width/heightare numbers, new fields documented, input names corrected.
2026-08-01
- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.
*Maintained: last verified 2026-11-01 — re-tested on the Apify platform against the live Openverse API (prefilled input, 160-result image run, audio run).