Pexels Stock Image Scraper avatar

Pexels Stock Image Scraper

Pricing

from $0.90 / 1,000 photos

Go to Apify Store
Pexels Stock Image Scraper

Pexels Stock Image Scraper

Extract free stock photos from Pexels: titles, tags, colors, dimensions, download URLs, and photographer details. Search by keyword or paste a Pexels search URL, filter by orientation, size, and color.

Pricing

from $0.90 / 1,000 photos

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Pexels Stock Image Scraper

Extract free stock photos from Pexels by keyword or search URL. The Pexels Stock Image Scraper returns clean, structured photo data — titles, tags, dominant colors, dimensions, download links, and full photographer details — ready for design tools, content pipelines, or dataset building.

Search by keyword or paste a Pexels search URL, filter by orientation, size, and dominant color, and get every photo's download links, tags, colors, and photographer metadata in one structured record.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify Actor: parsebird/pexels-stock-image-scraper. Scrapes free stock photos from Pexels (pexels.com). Call via ApifyClient: client.actor("parsebird/pexels-stock-image-scraper").call(run_input={"keyword": "summer", "results_wanted": 20}). Also accepts url (a Pexels search URL, filters preserved), max_pages, page (start page), orientation ("horizontal"/"vertical"/"square"), size ("large"/"medium"/"small"), color (name or hex), locale (e.g. "en-us", "de-de"), and proxyConfiguration. Returns per photo: id, type, slug, title, description, alt, photo_url, download_page_url, download_image_url, small_image_url, medium_image_url, large_image_url, width, height, aspect_ratio, license, created_at, updated_at, publish_at, tags, colors, main_color_rgb, photographer_id/name/slug/username/location/avatar/hero/instagram/twitter/badges, reactions_emotional/technical/stylistic_count, user, image, reactions, search (query/locale/source_url/page/total_photo_results/current_page). Full API spec: https://apify.com/parsebird/pexels-stock-image-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What does Pexels Stock Image Scraper do?

This actor renders Pexels' own search results page and reads the same structured data Pexels' frontend uses to display photos — no manual clicking, no rate-limit guesswork. You give it a keyword, a Pexels search URL, or both, and it returns every matching photo with dimensions, license, tags, dominant colors, and download links.

  • 🔍 Keyword or URL search — search by a plain keyword, or paste a Pexels search URL with filters already applied (?orientation=, ?color=, etc.) to preserve your exact search settings.
  • 🎚️ Orientation, size, and color filters — narrow results to horizontal, vertical, or square photos, a minimum resolution tier, or a dominant color (by name or hex code).
  • 📄 Configurable pagination — set a start page and a max-pages cap to control exactly how deep a run goes.
  • 🖼️ Full image variants — small, medium, large preview URLs plus the direct high-resolution download link for every photo.
  • 👤 Full photographer metadata — name, username, location, avatar, hero/badge status, and social links for attribution.
  • 🌍 Locale support — fetch results in a specific Pexels locale (e.g. de-de) to get localized titles and descriptions.

What data can you extract from Pexels?

FieldDescription
title / description / altPhoto title, description, and alt text
tagsPexels' own keyword tags for the photo
colors / main_color_rgbDominant color palette (hex) and main color (RGB)
width / height / aspect_ratioImage dimensions
download_image_url / download_page_urlDirect download link and Pexels download page
small_image_url / medium_image_url / large_image_urlPreview image variants at three sizes
licenseLicense label supplied by Pexels (typically Pexels, free to use)
photographer_name / photographer_username / photographer_locationPhotographer attribution
photographer_avatar_small / photographer_avatar_mediumPhotographer avatar images
searchThe query, locale, source URL, and page context the photo was found under

Input parameters

ParameterTypeRequiredDefaultDescription
urlstringNoPublic Pexels photo search URL; preserves filters already in the URL
keywordstringNosummerSearch keyword; used when no URL is given, or as the active query when both are supplied
results_wantedintegerNo20Maximum number of photo results to save
max_pagesintegerNo10Maximum number of result pages to process
pageintegerNo1Page number to start collecting from
orientationstringNohorizontal, vertical, or square
sizestringNolarge, medium, or small (approximate minimum resolution tier)
colorstringNoDominant color filter — a color name (e.g. blue) or hex code
localestringNoen-usLocale override, e.g. en-us or de-de
proxyConfigurationobjectNoResidential proxy onApify Proxy settings — residential proxy is required and on by default (Pexels blocks Apify's datacenter IPs)

Output example

{
"id": 8455817,
"type": "photo",
"slug": "color-flipflops-on-the-sand",
"title": "Color Flipflops on the Sand",
"description": "Vibrant flip flops stand in the sand against a clear blue sky.",
"alt": "Vibrant flip flops stand in the sand against a clear blue sky.",
"photo_url": "https://www.pexels.com/photo/color-flipflops-on-the-sand-8455817/",
"download_page_url": "https://www.pexels.com/photo/8455817/download/",
"download_image_url": "https://images.pexels.com/photos/8455817/pexels-photo-8455817.jpeg?cs=srgb&dl=pexels-rdne-8455817.jpg&fm=jpg",
"small_image_url": "https://images.pexels.com/photos/8455817/pexels-photo-8455817.jpeg?auto=compress&cs=tinysrgb&w=130",
"medium_image_url": "https://images.pexels.com/photos/8455817/pexels-photo-8455817.jpeg?auto=compress&cs=tinysrgb&w=350",
"large_image_url": "https://images.pexels.com/photos/8455817/pexels-photo-8455817.jpeg?auto=compress&cs=tinysrgb&w=1440",
"width": 4442,
"height": 6663,
"aspect_ratio": 0.6666666667,
"license": "Pexels",
"publish_at": "2021-06-23T22:00:45.455Z",
"tags": ["beach", "summer", "vacation"],
"colors": ["#008b8b", "#00bfff", "#cd5c5c"],
"photographer_name": "RDNE Stock project",
"photographer_slug": "rdne",
"photographer_location": "Los Angeles",
"search": {
"query": "summer",
"locale": "en-us",
"source_url": "https://www.pexels.com/search/summer/",
"page": 1,
"total_photo_results": 5186,
"current_page": 1
}
}

Download results as JSON, CSV, Excel, HTML, or XML directly from the Apify Console, or fetch them via the Apify API / dataset endpoint.

Use cases

  • Design and content pipelines — pull curated, license-clear stock photos by keyword directly into a CMS, design tool, or asset library.
  • Dataset building — build labeled image datasets with tags, colors, and dimensions for computer vision or ML projects.
  • Website and blog imagery — automate sourcing relevant photos for articles, landing pages, or social posts by topic.
  • Color-based mood boards — use the color filter to collect photos matching a specific brand palette.
  • Photographer discovery — surface active, high-output photographers on Pexels by keyword niche.

How to scrape Pexels stock photos

  1. Set your search — enter a Keyword, or paste a Pexels search URL into the URL field to preserve existing filters.
  2. Choose filters — set Orientation, Size, and Color to narrow the results.
  3. Set limits — Results Wanted caps total photos returned; Max Pages and Start Page control how deep pagination goes.
  4. Leave Proxy Configuration on — residential proxy is enabled by default and required for reliable access.
  5. Run the actor — click Start in the Apify Console, or trigger it via the API or on a schedule.
  6. Get your data — download the dataset as JSON/CSV/Excel, or pull it via the API.

How much does it cost to scrape Pexels?

This actor uses Pay-Per-Event (PPE) pricing — you're charged per photo extracted, not per compute unit.

EventPrice per eventPrice per 1,000
photo-scraped (Free plan)$0.0011$1.10
photo-scraped (Bronze)$0.001$1.00
photo-scraped (Silver)$0.00095$0.95
photo-scraped (Gold)$0.0009$0.90

A run collecting 500 photos costs roughly $0.45–$0.55 depending on your Apify plan. All Apify accounts include a free trial with credits to try the actor before committing to a paid plan.

FAQ

What does the size filter actually do? Pexels' own site filters photos by minimum width/height rather than a named size tier, so large/medium/small are mapped to approximate minimum-resolution thresholds (roughly matching Pexels' official API's 24MP/12MP/4MP tiers).

What format does color accept? Either a common color name (red, blue, green, etc.) or a hex code (with or without the #). The filter matches photos by dominant color, not exact pixel color.

Why do main_color_rgb or photographer_location sometimes come back empty? Not every photo has a Pexels-computed main color, and not every photographer has a location set on their profile. These fields are returned empty when Pexels doesn't supply a value.

Why is a proxy required? Pexels blocks Apify's datacenter IPs via Cloudflare, even from a real browser. A residential proxy is enabled by default in Proxy Configuration to keep runs reliable — turning it off will cause runs to fail.

Does this actor download the actual image files? No — it returns the download_image_url and image preview URLs so you can download files yourself, on your own schedule and infrastructure.

Does this actor support scheduling and integrations? Yes. Use Apify Schedules to run it daily or weekly, connect it to Zapier, Make, or Slack, or call it through the Apify API from your own backend.

What are the limitations of this actor? ⚠️

  • Pexels' search results are effectively capped around 10,000 matches per query, regardless of the total match count shown
  • Results reflect Pexels' public photo search only (not videos or user profiles)

Yes. This actor only accesses publicly available photo listings that Pexels makes visible to any visitor. It does not bypass login walls or access private accounts. Scraping publicly available data is generally considered legal — see Apify's overview of web scraping legality for more detail. All photos returned are licensed under the free Pexels License. Users are responsible for ensuring their use of the collected data complies with applicable laws and Pexels' Terms of Service.

Python and JavaScript usage

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"keyword": "summer",
"results_wanted": 50,
"orientation": "horizontal",
}
run = client.actor("parsebird/pexels-stock-image-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["download_image_url"])

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const input = {
keyword: 'summer',
results_wanted: 50,
orientation: 'horizontal',
};
const run = await client.actor('parsebird/pexels-stock-image-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Browse the full catalog on the ParseBird Apify Store page.