Unsplash Image Scraper
Pricing
from $1.50 / 1,000 photo scrapeds
Unsplash Image Scraper
Turn Unsplash into structured photo data — no API key, no rate limits to apply for. Search keywords or paste any collection, topic, or photographer URL. Every row: 5 image sizes, full attribution, EXIF, geolocation, views and downloads. Premium filtered out. JSON/CSV export
Pricing
from $1.50 / 1,000 photo scrapeds
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn Unsplash into structured photo data — no API key, no rate-limited developer app. Scrape photos from any keyword search, collection, topic, or photographer portfolio on unsplash.com — image URLs in 5 resolutions, photographer attribution (name, profile, portfolio, social), likes, dimensions, dominant color, BlurHash, plus optional EXIF camera data, geolocation, view/download counts, and tags — pulled straight from the site's own JSON API. JSON or CSV out, no compute charge per run, just per result.
How it works

✨ Why use this scraper?
Building a mood-board tool, training an image model, sourcing freely-usable visuals at scale, or analysing what performs on the world's biggest free-photo platform?
- 🎯 Five starting points. Keywords, search URLs (
/s/photos/{term}), collections (/collections/{id}), topics (/t/{slug}), photographer portfolios (/@{username}) and single photo URLs — all auto-classified, mixable in one run. - ⚡ The site's own JSON API as the data source. Every row comes from the same endpoints the unsplash.com frontend calls — no HTML parsing, no brittle selectors, no official-API key or 50-requests-per-hour demo limit.
- 🖼️ Five image resolutions per photo.
raw,full(2000px),regular(1080px),small(400px),thumb(200px) — plus the trackeddownloadUrl. - 📷 EXIF, geolocation and engagement stats. Opt-in
includePhotoDetailsadds camera make/model, aperture, ISO, GPS coordinates, view + download counts, tags and topics — fields most Unsplash scrapers don't return at all. - 👤 Full photographer attribution. Name, username, profile URL, portfolio link, Instagram/Twitter handles, for-hire flag, and total photo/like counts — everything you need to credit correctly.
- 🚫 Unsplash+ (premium) photos filtered out by default. Every row you pay for is a freely-usable photo, not a watermarked paid asset. Flip
includePremiumif you want them anyway. - 📤 Clean exports. One row per photo, deduped across all your keywords and URLs. JSON + CSV from the Apify dataset.
🎯 Use cases
| Team | What they build |
|---|---|
| Design / creative tools | Keyword-driven image pickers and mood-board generators with proper attribution baked in |
| ML / computer vision | Curated training datasets filtered by orientation, color and topic, with dimensions + EXIF metadata |
| Content & marketing | Bulk sourcing of blog/social visuals with the exact resolution variant they need |
| Market research | Engagement analysis — which subjects, colors and compositions earn the most views and downloads |
| Photographer scouting | For-hire photographers by topic, with portfolio links and social handles |
| SEO / web performance | BlurHash placeholders + multi-resolution URLs for responsive image pipelines |
📥 Supported inputs
Use queries for keyword searches, startUrls for URLs, or both in the same run.
| Input | Behaviour |
|---|---|
queries: ["coffee shop"] | Search — each keyword runs as its own search, with your orientation/color/sort filters applied |
https://unsplash.com/s/photos/{term} | Search URL — filters in the URL (?orientation=…) are picked up automatically |
https://unsplash.com/collections/{id}/{slug} | Collection — every photo in the collection |
https://unsplash.com/t/{slug} | Topic — e.g. /t/nature, /t/architecture-interior |
https://unsplash.com/@{username} | Photographer portfolio — all of a user's photos |
https://unsplash.com/photos/{slug} | Single photo — one full-detail row (EXIF, location, stats included automatically) |
Easiest workflow: browse unsplash.com, copy the URL out of the address bar, paste it into startUrls.
Not supported: logged-in content (likes, private collections), Unsplash+ full-resolution originals (requires an Unsplash+ subscription).
🔄 How it works
- Classify each keyword and URL into a search, collection, topic, photographer or single-photo source.
- Walk each source's JSON feed page by page until it's exhausted or
maxItemsis reached. - Dedupe photos across all sources and skip Unsplash+ premium rows (unless
includePremiumis on). - Optionally fetch each photo's detail record for EXIF, geolocation, views, downloads, tags and topics.
- Push one row per photo to the dataset — JSON and CSV export come free with the Apify dataset.
⚙️ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
queries | array | ["nature"] | Search keywords — each runs as its own Unsplash search. |
startUrls | array | (none) | unsplash.com URLs: search, collection, topic, photographer, or single photo. Mix freely with queries. |
orientation | string | any | Search filter: landscape, portrait, squarish. |
color | string | any | Search filter: black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue. |
orderBy | string | relevant | Search ordering: best match (relevant) or newest first (latest). |
includePhotoDetails | boolean | false | Fetch each photo's detail record for EXIF, geolocation, views, downloads, tags, topics. One extra HTTP call per photo. |
includePremium | boolean | false | Include Unsplash+ paid photos (their full-size URLs are watermarked without an Unsplash+ plan). |
maxItems | integer | 100 | Hard cap on photos collected across all sources — controls billing. |
maxConcurrency | integer | 10 | Parallel photo-detail calls. |
maxRequestRetries | integer | 5 | Retries before a failed request is given up. |
proxy | object | built-in | Leave empty — the actor routes through its own residential proxy at no extra cost. Set only to use your own pool. |
📊 Output overview
Each scraped photo is one single dataset row. Search filters (orientation, color, sort) are applied server-side by Unsplash, so the row count equals what you asked for — premium photos are filtered out before they count against maxItems, and duplicates across sources are pushed only once.
📦 Output sample
One row per photo (includePhotoDetails: true shown):
{"photoId": "TD4DBagg2wE","slug": "coffee-bean-lot-TD4DBagg2wE","photoUrl": "https://unsplash.com/photos/coffee-bean-lot-TD4DBagg2wE","description": null,"altDescription": "coffee bean lot","width": 4889,"height": 3728,"color": "#0c0c0c","blurHash": "LFE2t$oL0LR*R*WBofWB0fWC},sm","likes": 2743,"createdAt": "2015-11-19T12:52:31Z","premium": false,"plus": false,"sponsored": false,"urls": {"raw": "https://images.unsplash.com/photo-1447933601403-0c6688de566e?ixid=…","full": "https://images.unsplash.com/photo-1447933601403-0c6688de566e?…q=85","regular": "https://images.unsplash.com/photo-1447933601403-0c6688de566e?…w=1080","small": "https://images.unsplash.com/photo-1447933601403-0c6688de566e?…w=400","thumb": "https://images.unsplash.com/photo-1447933601403-0c6688de566e?…w=200"},"downloadUrl": "https://unsplash.com/photos/TD4DBagg2wE/download?ixid=…","photographer": {"username": "asthetik","name": "Mike Kenneally","profileUrl": "https://unsplash.com/@asthetik","portfolioUrl": null,"instagram": null,"twitter": null,"forHire": true,"totalPhotos": 24,"totalLikes": 291},"views": 42491249,"downloads": 513192,"exif": {"make": "NIKON CORPORATION","model": "NIKON D600","exposureTime": "1/125","aperture": "5.6","focalLength": "50.0","iso": 220},"location": {"name": "Ireland","city": null,"country": "Ireland","latitude": 53.41291,"longitude": -8.24389},"tags": ["background", "coffee", "coffee shop", "brown", "coffee beans", "…"],"topics": [],"source": { "type": "search", "query": "coffee", "url": "https://unsplash.com/s/photos/coffee" },"scrapedAt": "2026-07-12T03:42:55.510Z"}
🗂 Key output fields
| Group | Fields |
|---|---|
| Identifiers | photoId, slug, photoUrl, scrapedAt |
| Content | description, altDescription, width, height, color (dominant hex), blurHash (placeholder hash), assetType |
| Image URLs | urls.{raw,full,regular,small,thumb} (≈ original / 2000px / 1080px / 400px / 200px), downloadUrl (tracked download endpoint) |
| Engagement | likes; with details: views, downloads |
| Photographer | photographer.{id,username,name,bio,location,profileUrl,portfolioUrl,instagram,twitter,forHire,totalPhotos,totalLikes,totalCollections,profileImage} |
| Licensing flags | premium, plus (Unsplash+ paid content), sponsored, publicDomain (details only) |
| Camera EXIF (details only) | exif.{make,model,name,exposureTime,aperture,focalLength,iso} |
| Geolocation (details only) | location.{name,city,country,latitude,longitude} |
| Discovery (details only) | tags[], topics[] |
| Provenance | source.{type,query/collectionId/topic/username,url} — which keyword or URL produced the row |
❓ FAQ
Do I need an Unsplash API key? No. The actor reads the same public JSON endpoints the unsplash.com website itself uses — no developer application, no demo-tier 50 requests/hour limit, no OAuth.
How is this different from the official Unsplash API? The official API is great but requires an approved developer app for production rate limits, and its terms restrict certain uses. This actor needs zero setup and returns bulk structured rows ready for JSON/CSV export. For high-volume commercial products embedding Unsplash, the official partnership route may still be the right choice.
What are premium / plus photos and why are they skipped?
They're Unsplash+ paid content — their full-size URLs are watermarked unless you have an Unsplash+ subscription. By default the actor filters them out before they count toward maxItems, so every billed row is a freely-usable photo. Set includePremium: true to keep them.
When should I enable includePhotoDetails?
When you need EXIF camera data, GPS location, view/download counts, or tags. It costs one extra HTTP call per photo, so a 1,000-photo run makes 1,000 additional requests. Single-photo startUrls always return full details at no extra cost.
Can I download the actual image files?
The dataset contains direct images.unsplash.com URLs in five sizes plus the tracked downloadUrl — pipe them into any downloader. The actor itself stores metadata, not binaries, to keep results fast and cheap.
How do I limit results?
Set maxItems. The actor stops walking feeds the moment the cap is reserved, so a maxItems: 100 run fetches only ~5 search pages.
Do search filters apply to collections and photographer feeds?
No — orientation/color/sort are Unsplash search parameters, so they apply to queries and search URLs. Collections, topics and portfolios return their photos as curated.
💬 Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
🛠 Additional services
- Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
- Need a similar scraper for other image or content platforms? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
🔎 Explore more scrapers
If this Unsplash Image Scraper was useful, see other scrapers and actors at memo23's Apify profile — covering job boards, real estate, social media, and more.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Unsplash Inc. or any of its subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available photo data via unsplash.com's public JSON endpoints — no authenticated content, no Unsplash+ original files, no personal data beyond the public photographer profiles Unsplash itself displays. Photos on Unsplash are governed by the Unsplash License; Unsplash+ content requires a separate subscription. Users are responsible for ensuring their use complies with Unsplash's Terms of Service, the Unsplash License, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.
SEO Keywords
unsplash scraper, scrape unsplash, unsplash api alternative, unsplash image scraper, unsplash photo scraper, apify unsplash, unsplash bulk download, unsplash metadata scraper, unsplash without api key, free stock photo scraper, stock image scraper, unsplash collection scraper, unsplash photographer scraper, unsplash exif data, unsplash search api, image dataset builder, ml training images scraper, mood board image scraper, royalty free image api, unsplash downloads statistics, unsplash tags scraper