Unsplash Image Scraper avatar

Unsplash Image Scraper

Pricing

from $1.50 / 1,000 photo scrapeds

Go to Apify Store
Unsplash Image Scraper

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

How Unsplash Image Scraper 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 tracked downloadUrl.
  • 📷 EXIF, geolocation and engagement stats. Opt-in includePhotoDetails adds 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 includePremium if 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

TeamWhat they build
Design / creative toolsKeyword-driven image pickers and mood-board generators with proper attribution baked in
ML / computer visionCurated training datasets filtered by orientation, color and topic, with dimensions + EXIF metadata
Content & marketingBulk sourcing of blog/social visuals with the exact resolution variant they need
Market researchEngagement analysis — which subjects, colors and compositions earn the most views and downloads
Photographer scoutingFor-hire photographers by topic, with portfolio links and social handles
SEO / web performanceBlurHash placeholders + multi-resolution URLs for responsive image pipelines

📥 Supported inputs

Use queries for keyword searches, startUrls for URLs, or both in the same run.

InputBehaviour
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

  1. Classify each keyword and URL into a search, collection, topic, photographer or single-photo source.
  2. Walk each source's JSON feed page by page until it's exhausted or maxItems is reached.
  3. Dedupe photos across all sources and skip Unsplash+ premium rows (unless includePremium is on).
  4. Optionally fetch each photo's detail record for EXIF, geolocation, views, downloads, tags and topics.
  5. Push one row per photo to the dataset — JSON and CSV export come free with the Apify dataset.

⚙️ Input parameters

ParameterTypeDefaultDescription
queriesarray["nature"]Search keywords — each runs as its own Unsplash search.
startUrlsarray(none)unsplash.com URLs: search, collection, topic, photographer, or single photo. Mix freely with queries.
orientationstringanySearch filter: landscape, portrait, squarish.
colorstringanySearch filter: black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue.
orderBystringrelevantSearch ordering: best match (relevant) or newest first (latest).
includePhotoDetailsbooleanfalseFetch each photo's detail record for EXIF, geolocation, views, downloads, tags, topics. One extra HTTP call per photo.
includePremiumbooleanfalseInclude Unsplash+ paid photos (their full-size URLs are watermarked without an Unsplash+ plan).
maxItemsinteger100Hard cap on photos collected across all sources — controls billing.
maxConcurrencyinteger10Parallel photo-detail calls.
maxRequestRetriesinteger5Retries before a failed request is given up.
proxyobjectbuilt-inLeave 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

GroupFields
IdentifiersphotoId, slug, photoUrl, scrapedAt
Contentdescription, altDescription, width, height, color (dominant hex), blurHash (placeholder hash), assetType
Image URLsurls.{raw,full,regular,small,thumb} (≈ original / 2000px / 1080px / 400px / 200px), downloadUrl (tracked download endpoint)
Engagementlikes; with details: views, downloads
Photographerphotographer.{id,username,name,bio,location,profileUrl,portfolioUrl,instagram,twitter,forHire,totalPhotos,totalLikes,totalCollections,profileImage}
Licensing flagspremium, 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[]
Provenancesource.{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

🛠 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