{
  "data": {
    "id": "cdOIAmh17Gliaabig",
    "actId": "hyzBjwc4TeOTrPbn3",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-21T01:31:31.033Z",
    "finishedAt": "2026-10-21T01:31:43.513Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 12402,
      "runTimeSecs": 12.402,
      "computeUnits": 0.01378,
      "imageSizeBytes": 354349056
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Unsplash Photo Scraper Input\",\n  \"description\": \"Search Unsplash photos by keyword, topic, collection, photographer, photo URL, or any supported Unsplash URL.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape. Each mode has its own list field below.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byTopic\",\n        \"byCollection\",\n        \"byUser\",\n        \"byPhoto\",\n        \"byRelated\",\n        \"byUrls\"\n      ],\n      \"enumTitles\": [\n        \"Search photos by keyword\",\n        \"Browse curated topics\",\n        \"Browse collections\",\n        \"Browse photographer portfolios\",\n        \"Look up specific photos\",\n        \"Find photos related to a photo\",\n        \"Paste any Unsplash URL\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries (mode=search)\",\n      \"type\": \"array\",\n      \"description\": \"One or more keywords, e.g. `nature`, `coffee shop`, `minimal workspace`. Each query is searched separately.\",\n      \"editor\": \"stringList\",\n      \"default\": [\n        \"nature\"\n      ],\n      \"prefill\": [\n        \"nature\"\n      ]\n    },\n    \"topicSlugs\": {\n      \"title\": \"Topics (mode=byTopic)\",\n      \"type\": \"array\",\n      \"description\": \"One or more curated Unsplash photo topics.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"animals\",\n          \"architecture-interior\",\n          \"experimental\",\n          \"fashion-beauty\",\n          \"film\",\n          \"Fall\",\n          \"nature\",\n          \"people\",\n          \"travel\",\n          \"3d-renders\",\n          \"wallpapers\",\n          \"textures-patterns\",\n          \"street-photography\",\n          \"nostalgia\"\n        ],\n        \"enumTitles\": [\n          \"Animals\",\n          \"Architecture\",\n          \"Experimental\",\n          \"Fashion & Beauty\",\n          \"Film\",\n          \"Fall\",\n          \"Nature\",\n          \"People\",\n          \"Travel\",\n          \"3D Renders\",\n          \"Wallpapers\",\n          \"Textures & Patterns\",\n          \"Street Photography\",\n          \"Nostalgia\"\n        ]\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"collectionIds\": {\n      \"title\": \"Collections (mode=byCollection)\",\n      \"type\": \"array\",\n      \"description\": \"Collection IDs or collection URLs, e.g. `1065396` or `https://unsplash.com/collections/1065396/...`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"usernames\": {\n      \"title\": \"Photographers (mode=byUser)\",\n      \"type\": \"array\",\n      \"description\": \"Photographer usernames with or without `@`, or profile URLs, e.g. `v2osk` or `https://unsplash.com/@v2osk`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"photoIds\": {\n      \"title\": \"Photo IDs or URLs (mode=byPhoto or byRelated)\",\n      \"type\": \"array\",\n      \"description\": \"Unsplash photo IDs, slugs, or photo page URLs, e.g. `fWBZ9r4vO9M`. Used as lookup targets in byPhoto and as seed photos in byRelated.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"startUrls\": {\n      \"title\": \"Unsplash URLs (mode=byUrls)\",\n      \"type\": \"array\",\n      \"description\": \"Any mix of supported Unsplash search, topic, collection, photographer, or photo URLs.\",\n      \"editor\": \"requestListSources\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"orientation\": {\n      \"title\": \"Orientation\",\n      \"type\": \"string\",\n      \"description\": \"Only keep photos of this orientation. The filter is exact and works in every mode.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"landscape\",\n        \"portrait\",\n        \"squarish\"\n      ],\n      \"enumTitles\": [\n        \"Any orientation\",\n        \"Landscape\",\n        \"Portrait\",\n        \"Squarish\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"color\": {\n      \"title\": \"Dominant colour (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Filter keyword searches by Unsplash's dominant-colour tag. Not supported on topic, collection, or portfolio feeds.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"black_and_white\",\n        \"black\",\n        \"white\",\n        \"yellow\",\n        \"orange\",\n        \"red\",\n        \"purple\",\n        \"magenta\",\n        \"green\",\n        \"teal\",\n        \"blue\"\n      ],\n      \"enumTitles\": [\n        \"Any colour\",\n        \"Black & white\",\n        \"Black\",\n        \"White\",\n        \"Yellow\",\n        \"Orange\",\n        \"Red\",\n        \"Purple\",\n        \"Magenta\",\n        \"Green\",\n        \"Teal\",\n        \"Blue\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"freeOnly\": {\n      \"title\": \"Free photos only\",\n      \"type\": \"boolean\",\n      \"description\": \"Exclude Unsplash+ (paid/locked) photos. Their full-size files require a separate Unsplash+ plan.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"searchOrderBy\": {\n      \"title\": \"Search order (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Sort keyword search results by best match or newest first.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevant\",\n        \"latest\"\n      ],\n      \"enumTitles\": [\n        \"Best match\",\n        \"Newest first\"\n      ],\n      \"default\": \"relevant\",\n      \"prefill\": \"relevant\"\n    },\n    \"userOrderBy\": {\n      \"title\": \"Portfolio order (mode=byUser)\",\n      \"type\": \"string\",\n      \"description\": \"Sort a photographer's photos. Pinned matches the order shown on their Unsplash profile.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"pinned\",\n        \"latest\",\n        \"oldest\",\n        \"popular\"\n      ],\n      \"enumTitles\": [\n        \"Pinned (profile order)\",\n        \"Newest first\",\n        \"Oldest first\",\n        \"Most popular\"\n      ],\n      \"default\": \"pinned\",\n      \"prefill\": \"pinned\"\n    },\n    \"includePhotoDetails\": {\n      \"title\": \"Include photo details\",\n      \"type\": \"boolean\",\n      \"description\": \"Add tags, camera EXIF, geolocation, topics, and view/download counts. Costs extra requests per photo and is slower.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includePhotographerStats\": {\n      \"title\": \"Include photographer totals\",\n      \"type\": \"boolean\",\n      \"description\": \"Add each photographer's lifetime view and download totals. One extra request per photographer.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max photos\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted photos across all queries and URLs.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 20,\n      \"prefill\": 2\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Unsplash Photo Search by Topic, Collection & Creator\n\nScrape **Unsplash** photos by keyword, curated topic, collection, photographer, photo ID, or any supported Unsplash URL. Each row returns five image sizes, full photographer attribution, dimensions, orientation, dominant colour, BlurHash, likes, and optional tags, camera EXIF, geolocation, topic memberships, and view/download counts. No API key, login, or proxy setup.\n\n## What this actor does\n\n- **Seven ways to source photos:** keyword search, curated topics, numbered collections, photographer portfolios, specific photos, related photos, or a mixed list of pasted Unsplash URLs.\n- **Search filters:** orientation, dominant colour, best-match or newest-first ordering, and a free-photos-only switch.\n- **Portfolio ordering:** pinned (profile order), newest, oldest, or most popular.\n- **Rich metadata:** five image resolutions, photographer name/username/profile/socials, dimensions, colour, BlurHash, likes, and timestamps on every row.\n- **Optional detail pass:** adds tags, camera EXIF, place names and coordinates, topic memberships, and real view/download counts for free photos.\n- **Optional photographer totals:** each photographer's lifetime views and downloads.\n- **Empty fields are omitted** — a photo without EXIF or a tagged location simply has no such field.\n\n## Output per photo\n\n**Identity and content**\n\n- `id`, `slug` — Unsplash photo ID and descriptive slug\n- `title`, `description`, `altDescription`, `shortDescription` — captions and alt text when available\n- `width`, `height`, `aspectRatio`, `orientation` — native dimensions and `landscape` / `portrait` / `squarish`\n- `dominantColor`, `blurHash`, `likes`\n- `isPremium`, `premium`, `plus` — Unsplash+ flags\n- `datePublished`, `updatedAt`, `promotedAt`\n\n**Images**\n\n- `imageUrl` — regular 1080px image\n- `thumbnailUrl` — 200px thumbnail\n- `imageUrls.raw`, `imageUrls.full`, `imageUrls.regular`, `imageUrls.small`, `imageUrls.thumb`, `imageUrls.smallS3` — every size in one object (`smallS3` is included for premium photos when the S3 copy responds; the actor checks up to 100 premium photos per details run and falls back to the always-present `plus.unsplash.com` variants when it does not)\n\n**Photographer attribution**\n\n- `photographerId`, `photographerUsername`, `photographerName`, `photographerFirstName`, `photographerLastName`\n- `photographerBio`, `photographerLocation`, `photographerPortfolioUrl`, `photographerProfileUrl`\n- `photographerInstagram`, `photographerTwitter`, `photographerForHire`\n- `photographerTotalPhotos`, `photographerTotalFreePhotos`, `photographerTotalLikes`, `photographerTotalCollections`, `photographerProfileImageUrl`\n- `photographerTotalViews`, `photographerTotalDownloads` — when photographer totals are enabled\n\n**Photo details (when enabled)**\n\n- `tags` — up to 20 keyword tags\n- `topics` — `{id, slug, title}` memberships\n- `exif.make`, `exif.model`, `exif.name`, `exif.exposureTime`, `exif.aperture`, `exif.focalLength`, `exif.iso`\n- `location.name`, `location.city`, `location.country`, `location.latitude`, `location.longitude`\n- `locationName` — the place name as a flat field\n- `views`, `downloads` — free photos only; Unsplash does not publish stats for premium photos\n\n**Licence, downloads, provenance**\n\n- `license` — Unsplash License or Unsplash+ License\n- `downloadUrl` — a direct CDN image file that opens without a browser session\n- `downloadPageUrl` — Unsplash's tracked download page\n- `sourceUrl` — the photo's page on unsplash.com\n- `sourceType`, `sourceValue`, `sourceTitle` — which query, topic, collection, photographer, or photo produced the row\n- `recordType` — always `photo`\n- `scrapedAt` — collection timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `mode` | String (select) | `search` | `search`, `byTopic`, `byCollection`, `byUser`, `byPhoto`, `byRelated`, or `byUrls`. |\n| `searchQueries` | Array | `[\"nature\"]` | Keywords to search (mode=search). |\n| `topicSlugs` | Array (select) | – | Curated topics (mode=byTopic). |\n| `collectionIds` | Array | – | Collection IDs or URLs (mode=byCollection). |\n| `usernames` | Array | – | Photographer usernames or profile URLs (mode=byUser). |\n| `photoIds` | Array | – | Photo IDs, slugs, or photo URLs (mode=byPhoto or byRelated). |\n| `startUrls` | Array | – | Mixed Unsplash search/topic/collection/photographer/photo URLs (mode=byUrls). |\n| `orientation` | String (select) | `any` | `any`, `landscape`, `portrait`, or `squarish`. Exact filter in every mode. |\n| `color` | String (select) | `any` | Dominant colour for keyword searches only. |\n| `freeOnly` | Boolean | false | Exclude Unsplash+ photos. |\n| `searchOrderBy` | String (select) | `relevant` | `relevant` or `latest` (mode=search). |\n| `userOrderBy` | String (select) | `pinned` | `pinned`, `latest`, `oldest`, or `popular` (mode=byUser). |\n| `includePhotoDetails` | Boolean | false | Add tags, EXIF, location, topics, and free-photo stats. |\n| `includePhotographerStats` | Boolean | false | Add lifetime views/downloads for each photographer. |\n| `maxItems` | Integer | 20 | Maximum photos across all sources (1-1000). |\n\n### Example: keyword search with filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"mountain sunrise\", \"coastal fog\"],\n  \"orientation\": \"landscape\",\n  \"color\": \"blue\",\n  \"freeOnly\": true,\n  \"searchOrderBy\": \"latest\",\n  \"maxItems\": 80\n}\n```\n\n### Example: a curated topic with details\n\n```json\n{\n  \"mode\": \"byTopic\",\n  \"topicSlugs\": [\"nature\", \"wallpapers\"],\n  \"orientation\": \"portrait\",\n  \"includePhotoDetails\": true,\n  \"maxItems\": 40\n}\n```\n\n### Example: a collection and a photographer together\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"startUrls\": [\n    { \"url\": \"https://unsplash.com/collections/1065396\" },\n    { \"url\": \"https://unsplash.com/@v2osk\" }\n  ],\n  \"userOrderBy\": \"latest\",\n  \"maxItems\": 50\n}\n```\n\n### Example: one photo with everything\n\n```json\n{\n  \"mode\": \"byPhoto\",\n  \"photoIds\": [\"fWBZ9r4vO9M\"],\n  \"includePhotoDetails\": true,\n  \"includePhotographerStats\": true\n}\n```\n\n### Example: photos related to a seed photo\n\n```json\n{\n  \"mode\": \"byRelated\",\n  \"photoIds\": [\"1Z2niiBPg5A\"],\n  \"orientation\": \"landscape\",\n  \"maxItems\": 40\n}\n```\n\n## Use cases\n\n- **Content and design teams** — source on-brand photography in the right orientation and colour.\n- **ML and computer-vision datasets** — build labelled image sets with captions, tags, EXIF, dimensions, and geodata.\n- **Photographer research** — track a portfolio's newest work, popular shots, and lifetime reach.\n- **Visual discovery** — expand a seed photo into Unsplash's related-photo feed.\n- **Collection monitoring** — keep an audit trail of a curated collection or topic over time.\n- **Wallpaper and app catalogs** — pull multiple resolutions and BlurHash placeholders in one run.\n- **Market and trend analysis** — compare likes, views, and downloads across subjects and visual styles.\n\n## Data source and licence\n\nThis actor reads Unsplash's public website data. It is not affiliated with, endorsed by, or sponsored by Unsplash.\n\nPhotos are covered by the [Unsplash License](https://unsplash.com/license): free for commercial and non-commercial use, no permission needed, and **attribution is appreciated but not required**. You may not sell unmodified photos or compile Unsplash images to replicate a competing image service. Unsplash+ photos are covered by the separate Unsplash+ License and need an Unsplash+ plan for full-size files; their CDN images are watermarked.\n\nUnsplash's API guidelines ask apps to trigger `links.download_location` when a user downloads a photo. That endpoint requires Unsplash API credentials. This actor is an independent website scraper: it returns `downloadUrl` (a direct CDN file) and `downloadPageUrl` (Unsplash's tracked web download page) instead of calling `download_location`. If you build a product on the official API, follow its guidelines and use your own credentials.\n\n## FAQ\n\n**Do I need an Unsplash API key or account?**\nNo. All modes work without an account, API key, login, or cookies.\n\n**How many photos can I get, and can I pass the 4,000-per-query search limit?**\n`maxItems` caps a run at 1,000 photos. A single keyword search has its own 4,000-row window. To go wider, partition the query: run it separately for landscape / portrait / squarish, for different dominant colours, or for free vs Unsplash+ photos, then combine the rows by `id`. Topic, collection, photographer, and related feeds can be deeper still.\n\n**Why are `views` and `downloads` missing on some rows?**\nUnsplash publishes per-photo stats for free photos only. Premium photo stats are suppressed, so the actor omits them instead of returning a misleading zero. Photographer lifetime totals are still available when enabled.\n\n**Why are EXIF, location, or tags missing?**\nThey are photographer-supplied and only present on some photos. The detail pass adds them when Unsplash has them; otherwise the field is omitted.\n\n**Why is there no family-friendly flag?**\nUnsplash's JSON source does not expose it. The flag only appears in the HTML photo page (300-380 KB decompressed, ~70 KB compressed), and a Range request for the JSON-LD window returns HTTP 416, so the actor does not pay an extra full-page read per photo for one low-value boolean.\n\n**Does the actor return illustrations?**\nNo. This is a photo actor. Unsplash serves illustrations as a separate asset type; mixing them would change the record schema and the supported filters.\n\n**What is the difference between `downloadUrl`, `downloadPageUrl`, and `sourceUrl`? Does the actor download files?**\n`downloadUrl` and the `imageUrls` variants are direct CDN files that work from scripts and integrations. `downloadPageUrl` and `sourceUrl` are Unsplash web pages protected by its bot check; they open normally in a browser. The actor returns metadata and URLs, not image binaries — use your own downloader if you need the files.\n\n**Can I use the photos commercially?**\nYes, under the Unsplash License, including commercial use. Attribution is appreciated but not required. Do not sell unmodified photos or build a competing image service from Unsplash content. Check the licence for every use case.\n\n**Why does a portfolio or topic stop before `maxItems`?**\nThe source may have fewer photos than requested, or a filter (orientation/free-only) removed candidates. The actor only counts photos that pass every filter, so it never returns short by silently including filtered-out rows.\n\n**Do I need to configure a proxy? How fresh is the data?**\nNo proxy setup is needed; the actor chooses a working connection automatically. Every run reads Unsplash live, with nothing cached between runs.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "unsplash-photo-search-by-topic-collection",
      "title": "Unsplash Photo Search by Topic, Collection & Creator",
      "description": "Search Unsplash photos by keyword, topic, collection, photographer, photo URL, or related photo. Returns five image sizes, photographer attribution, EXIF, location, tags, topics, likes, and engagement counts. No API key, login, or proxy setup.",
      "version": "1.1",
      "buildTag": "latest",
      "defaultMemoryMbytes": 1024,
      "dockerfile": "./Dockerfile",
      "readme": "# Unsplash Photo Search by Topic, Collection & Creator\n\nScrape **Unsplash** photos by keyword, curated topic, collection, photographer, photo ID, or any supported Unsplash URL. Each row returns five image sizes, full photographer attribution, dimensions, orientation, dominant colour, BlurHash, likes, and optional tags, camera EXIF, geolocation, topic memberships, and view/download counts. No API key, login, or proxy setup.\n\n## What this actor does\n\n- **Seven ways to source photos:** keyword search, curated topics, numbered collections, photographer portfolios, specific photos, related photos, or a mixed list of pasted Unsplash URLs.\n- **Search filters:** orientation, dominant colour, best-match or newest-first ordering, and a free-photos-only switch.\n- **Portfolio ordering:** pinned (profile order), newest, oldest, or most popular.\n- **Rich metadata:** five image resolutions, photographer name/username/profile/socials, dimensions, colour, BlurHash, likes, and timestamps on every row.\n- **Optional detail pass:** adds tags, camera EXIF, place names and coordinates, topic memberships, and real view/download counts for free photos.\n- **Optional photographer totals:** each photographer's lifetime views and downloads.\n- **Empty fields are omitted** — a photo without EXIF or a tagged location simply has no such field.\n\n## Output per photo\n\n**Identity and content**\n\n- `id`, `slug` — Unsplash photo ID and descriptive slug\n- `title`, `description`, `altDescription`, `shortDescription` — captions and alt text when available\n- `width`, `height`, `aspectRatio`, `orientation` — native dimensions and `landscape` / `portrait` / `squarish`\n- `dominantColor`, `blurHash`, `likes`\n- `isPremium`, `premium`, `plus` — Unsplash+ flags\n- `datePublished`, `updatedAt`, `promotedAt`\n\n**Images**\n\n- `imageUrl` — regular 1080px image\n- `thumbnailUrl` — 200px thumbnail\n- `imageUrls.raw`, `imageUrls.full`, `imageUrls.regular`, `imageUrls.small`, `imageUrls.thumb`, `imageUrls.smallS3` — every size in one object (`smallS3` is included for premium photos when the S3 copy responds; the actor checks up to 100 premium photos per details run and falls back to the always-present `plus.unsplash.com` variants when it does not)\n\n**Photographer attribution**\n\n- `photographerId`, `photographerUsername`, `photographerName`, `photographerFirstName`, `photographerLastName`\n- `photographerBio`, `photographerLocation`, `photographerPortfolioUrl`, `photographerProfileUrl`\n- `photographerInstagram`, `photographerTwitter`, `photographerForHire`\n- `photographerTotalPhotos`, `photographerTotalFreePhotos`, `photographerTotalLikes`, `photographerTotalCollections`, `photographerProfileImageUrl`\n- `photographerTotalViews`, `photographerTotalDownloads` — when photographer totals are enabled\n\n**Photo details (when enabled)**\n\n- `tags` — up to 20 keyword tags\n- `topics` — `{id, slug, title}` memberships\n- `exif.make`, `exif.model`, `exif.name`, `exif.exposureTime`, `exif.aperture`, `exif.focalLength`, `exif.iso`\n- `location.name`, `location.city`, `location.country`, `location.latitude`, `location.longitude`\n- `locationName` — the place name as a flat field\n- `views`, `downloads` — free photos only; Unsplash does not publish stats for premium photos\n\n**Licence, downloads, provenance**\n\n- `license` — Unsplash License or Unsplash+ License\n- `downloadUrl` — a direct CDN image file that opens without a browser session\n- `downloadPageUrl` — Unsplash's tracked download page\n- `sourceUrl` — the photo's page on unsplash.com\n- `sourceType`, `sourceValue`, `sourceTitle` — which query, topic, collection, photographer, or photo produced the row\n- `recordType` — always `photo`\n- `scrapedAt` — collection timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `mode` | String (select) | `search` | `search`, `byTopic`, `byCollection`, `byUser`, `byPhoto`, `byRelated`, or `byUrls`. |\n| `searchQueries` | Array | `[\"nature\"]` | Keywords to search (mode=search). |\n| `topicSlugs` | Array (select) | – | Curated topics (mode=byTopic). |\n| `collectionIds` | Array | – | Collection IDs or URLs (mode=byCollection). |\n| `usernames` | Array | – | Photographer usernames or profile URLs (mode=byUser). |\n| `photoIds` | Array | – | Photo IDs, slugs, or photo URLs (mode=byPhoto or byRelated). |\n| `startUrls` | Array | – | Mixed Unsplash search/topic/collection/photographer/photo URLs (mode=byUrls). |\n| `orientation` | String (select) | `any` | `any`, `landscape`, `portrait`, or `squarish`. Exact filter in every mode. |\n| `color` | String (select) | `any` | Dominant colour for keyword searches only. |\n| `freeOnly` | Boolean | false | Exclude Unsplash+ photos. |\n| `searchOrderBy` | String (select) | `relevant` | `relevant` or `latest` (mode=search). |\n| `userOrderBy` | String (select) | `pinned` | `pinned`, `latest`, `oldest`, or `popular` (mode=byUser). |\n| `includePhotoDetails` | Boolean | false | Add tags, EXIF, location, topics, and free-photo stats. |\n| `includePhotographerStats` | Boolean | false | Add lifetime views/downloads for each photographer. |\n| `maxItems` | Integer | 20 | Maximum photos across all sources (1-1000). |\n\n### Example: keyword search with filters\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"mountain sunrise\", \"coastal fog\"],\n  \"orientation\": \"landscape\",\n  \"color\": \"blue\",\n  \"freeOnly\": true,\n  \"searchOrderBy\": \"latest\",\n  \"maxItems\": 80\n}\n```\n\n### Example: a curated topic with details\n\n```json\n{\n  \"mode\": \"byTopic\",\n  \"topicSlugs\": [\"nature\", \"wallpapers\"],\n  \"orientation\": \"portrait\",\n  \"includePhotoDetails\": true,\n  \"maxItems\": 40\n}\n```\n\n### Example: a collection and a photographer together\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"startUrls\": [\n    { \"url\": \"https://unsplash.com/collections/1065396\" },\n    { \"url\": \"https://unsplash.com/@v2osk\" }\n  ],\n  \"userOrderBy\": \"latest\",\n  \"maxItems\": 50\n}\n```\n\n### Example: one photo with everything\n\n```json\n{\n  \"mode\": \"byPhoto\",\n  \"photoIds\": [\"fWBZ9r4vO9M\"],\n  \"includePhotoDetails\": true,\n  \"includePhotographerStats\": true\n}\n```\n\n### Example: photos related to a seed photo\n\n```json\n{\n  \"mode\": \"byRelated\",\n  \"photoIds\": [\"1Z2niiBPg5A\"],\n  \"orientation\": \"landscape\",\n  \"maxItems\": 40\n}\n```\n\n## Use cases\n\n- **Content and design teams** — source on-brand photography in the right orientation and colour.\n- **ML and computer-vision datasets** — build labelled image sets with captions, tags, EXIF, dimensions, and geodata.\n- **Photographer research** — track a portfolio's newest work, popular shots, and lifetime reach.\n- **Visual discovery** — expand a seed photo into Unsplash's related-photo feed.\n- **Collection monitoring** — keep an audit trail of a curated collection or topic over time.\n- **Wallpaper and app catalogs** — pull multiple resolutions and BlurHash placeholders in one run.\n- **Market and trend analysis** — compare likes, views, and downloads across subjects and visual styles.\n\n## Data source and licence\n\nThis actor reads Unsplash's public website data. It is not affiliated with, endorsed by, or sponsored by Unsplash.\n\nPhotos are covered by the [Unsplash License](https://unsplash.com/license): free for commercial and non-commercial use, no permission needed, and **attribution is appreciated but not required**. You may not sell unmodified photos or compile Unsplash images to replicate a competing image service. Unsplash+ photos are covered by the separate Unsplash+ License and need an Unsplash+ plan for full-size files; their CDN images are watermarked.\n\nUnsplash's API guidelines ask apps to trigger `links.download_location` when a user downloads a photo. That endpoint requires Unsplash API credentials. This actor is an independent website scraper: it returns `downloadUrl` (a direct CDN file) and `downloadPageUrl` (Unsplash's tracked web download page) instead of calling `download_location`. If you build a product on the official API, follow its guidelines and use your own credentials.\n\n## FAQ\n\n**Do I need an Unsplash API key or account?**\nNo. All modes work without an account, API key, login, or cookies.\n\n**How many photos can I get, and can I pass the 4,000-per-query search limit?**\n`maxItems` caps a run at 1,000 photos. A single keyword search has its own 4,000-row window. To go wider, partition the query: run it separately for landscape / portrait / squarish, for different dominant colours, or for free vs Unsplash+ photos, then combine the rows by `id`. Topic, collection, photographer, and related feeds can be deeper still.\n\n**Why are `views` and `downloads` missing on some rows?**\nUnsplash publishes per-photo stats for free photos only. Premium photo stats are suppressed, so the actor omits them instead of returning a misleading zero. Photographer lifetime totals are still available when enabled.\n\n**Why are EXIF, location, or tags missing?**\nThey are photographer-supplied and only present on some photos. The detail pass adds them when Unsplash has them; otherwise the field is omitted.\n\n**Why is there no family-friendly flag?**\nUnsplash's JSON source does not expose it. The flag only appears in the HTML photo page (300-380 KB decompressed, ~70 KB compressed), and a Range request for the JSON-LD window returns HTTP 416, so the actor does not pay an extra full-page read per photo for one low-value boolean.\n\n**Does the actor return illustrations?**\nNo. This is a photo actor. Unsplash serves illustrations as a separate asset type; mixing them would change the record schema and the supported filters.\n\n**What is the difference between `downloadUrl`, `downloadPageUrl`, and `sourceUrl`? Does the actor download files?**\n`downloadUrl` and the `imageUrls` variants are direct CDN files that work from scripts and integrations. `downloadPageUrl` and `sourceUrl` are Unsplash web pages protected by its bot check; they open normally in a browser. The actor returns metadata and URLs, not image binaries — use your own downloader if you need the files.\n\n**Can I use the photos commercially?**\nYes, under the Unsplash License, including commercial use. Attribution is appreciated but not required. Do not sell unmodified photos or build a competing image service from Unsplash content. Check the licence for every use case.\n\n**Why does a portfolio or topic stop before `maxItems`?**\nThe source may have fewer photos than requested, or a filter (orientation/free-only) removed candidates. The actor only counts photos that pass every filter, so it never returns short by silently including filtered-out rows.\n\n**Do I need to configure a proxy? How fresh is the data?**\nNo proxy setup is needed; the actor chooses a working connection automatically. Every run reads Unsplash live, with nothing cached between runs.\n",
      "input": {
        "title": "Unsplash Photo Scraper Input",
        "description": "Search Unsplash photos by keyword, topic, collection, photographer, photo URL, or any supported Unsplash URL.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to scrape. Each mode has its own list field below.",
            "editor": "select",
            "enum": [
              "search",
              "byTopic",
              "byCollection",
              "byUser",
              "byPhoto",
              "byRelated",
              "byUrls"
            ],
            "enumTitles": [
              "Search photos by keyword",
              "Browse curated topics",
              "Browse collections",
              "Browse photographer portfolios",
              "Look up specific photos",
              "Find photos related to a photo",
              "Paste any Unsplash URL"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQueries": {
            "title": "Search queries (mode=search)",
            "type": "array",
            "description": "One or more keywords, e.g. `nature`, `coffee shop`, `minimal workspace`. Each query is searched separately.",
            "editor": "stringList",
            "default": [
              "nature"
            ],
            "prefill": [
              "nature"
            ]
          },
          "topicSlugs": {
            "title": "Topics (mode=byTopic)",
            "type": "array",
            "description": "One or more curated Unsplash photo topics.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "animals",
                "architecture-interior",
                "experimental",
                "fashion-beauty",
                "film",
                "Fall",
                "nature",
                "people",
                "travel",
                "3d-renders",
                "wallpapers",
                "textures-patterns",
                "street-photography",
                "nostalgia"
              ],
              "enumTitles": [
                "Animals",
                "Architecture",
                "Experimental",
                "Fashion & Beauty",
                "Film",
                "Fall",
                "Nature",
                "People",
                "Travel",
                "3D Renders",
                "Wallpapers",
                "Textures & Patterns",
                "Street Photography",
                "Nostalgia"
              ]
            },
            "default": [],
            "prefill": []
          },
          "collectionIds": {
            "title": "Collections (mode=byCollection)",
            "type": "array",
            "description": "Collection IDs or collection URLs, e.g. `1065396` or `https://unsplash.com/collections/1065396/...`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "usernames": {
            "title": "Photographers (mode=byUser)",
            "type": "array",
            "description": "Photographer usernames with or without `@`, or profile URLs, e.g. `v2osk` or `https://unsplash.com/@v2osk`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "photoIds": {
            "title": "Photo IDs or URLs (mode=byPhoto or byRelated)",
            "type": "array",
            "description": "Unsplash photo IDs, slugs, or photo page URLs, e.g. `fWBZ9r4vO9M`. Used as lookup targets in byPhoto and as seed photos in byRelated.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "startUrls": {
            "title": "Unsplash URLs (mode=byUrls)",
            "type": "array",
            "description": "Any mix of supported Unsplash search, topic, collection, photographer, or photo URLs.",
            "editor": "requestListSources",
            "default": [],
            "prefill": []
          },
          "orientation": {
            "title": "Orientation",
            "type": "string",
            "description": "Only keep photos of this orientation. The filter is exact and works in every mode.",
            "editor": "select",
            "enum": [
              "any",
              "landscape",
              "portrait",
              "squarish"
            ],
            "enumTitles": [
              "Any orientation",
              "Landscape",
              "Portrait",
              "Squarish"
            ],
            "default": "any",
            "prefill": "any"
          },
          "color": {
            "title": "Dominant colour (mode=search)",
            "type": "string",
            "description": "Filter keyword searches by Unsplash's dominant-colour tag. Not supported on topic, collection, or portfolio feeds.",
            "editor": "select",
            "enum": [
              "any",
              "black_and_white",
              "black",
              "white",
              "yellow",
              "orange",
              "red",
              "purple",
              "magenta",
              "green",
              "teal",
              "blue"
            ],
            "enumTitles": [
              "Any colour",
              "Black & white",
              "Black",
              "White",
              "Yellow",
              "Orange",
              "Red",
              "Purple",
              "Magenta",
              "Green",
              "Teal",
              "Blue"
            ],
            "default": "any",
            "prefill": "any"
          },
          "freeOnly": {
            "title": "Free photos only",
            "type": "boolean",
            "description": "Exclude Unsplash+ (paid/locked) photos. Their full-size files require a separate Unsplash+ plan.",
            "default": false,
            "prefill": false
          },
          "searchOrderBy": {
            "title": "Search order (mode=search)",
            "type": "string",
            "description": "Sort keyword search results by best match or newest first.",
            "editor": "select",
            "enum": [
              "relevant",
              "latest"
            ],
            "enumTitles": [
              "Best match",
              "Newest first"
            ],
            "default": "relevant",
            "prefill": "relevant"
          },
          "userOrderBy": {
            "title": "Portfolio order (mode=byUser)",
            "type": "string",
            "description": "Sort a photographer's photos. Pinned matches the order shown on their Unsplash profile.",
            "editor": "select",
            "enum": [
              "pinned",
              "latest",
              "oldest",
              "popular"
            ],
            "enumTitles": [
              "Pinned (profile order)",
              "Newest first",
              "Oldest first",
              "Most popular"
            ],
            "default": "pinned",
            "prefill": "pinned"
          },
          "includePhotoDetails": {
            "title": "Include photo details",
            "type": "boolean",
            "description": "Add tags, camera EXIF, geolocation, topics, and view/download counts. Costs extra requests per photo and is slower.",
            "default": false,
            "prefill": false
          },
          "includePhotographerStats": {
            "title": "Include photographer totals",
            "type": "boolean",
            "description": "Add each photographer's lifetime view and download totals. One extra request per photographer.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max photos",
            "type": "integer",
            "description": "Hard cap on emitted photos across all queries and URLs.",
            "minimum": 1,
            "maximum": 1000,
            "default": 20,
            "prefill": 2
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Unsplash Photo Search by Topic, Collection & Creator Output",
        "description": "Photos from Unsplash with five image sizes, photographer attribution, dimensions, orientation, dominant colour, likes, and optional EXIF, geolocation, tags, topics, and engagement counts.",
        "properties": {
          "photos": {
            "type": "string",
            "title": "Unsplash photos",
            "description": "Dataset containing all scraped Unsplash photos.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Photos",
              "transformation": {
                "fields": [
                  "title",
                  "photographerName",
                  "orientation",
                  "width",
                  "height",
                  "likes",
                  "imageUrl",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 600,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.1.1",
    "imageDigest": "21ec3287aac388f89fcbd48ffffabcdfbeb04b76693094deba765cc1a1310ac5",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01378
    }
  }
}