Skip to content
    ↑↓ to choose · Enter to open

    · 13 min read

    Pexels Stock Media Scraper: Up to 1,000 Free Results a Month (2026)

    By CrawlerBros Engineering Team

    Up to 1,000 results per month are available on Apify's free plan for $5.00 per 1,000, providing direct access to royalty-free media metadata and CDN download links without an API key. Each photo record carries 36 fields and each video record 37 fields, including high-resolution file URLs, dominant hex colors, and photographer social links. The Actor operates across six modes, such as keyword search and curated collections. This Actor is for developers building automated asset pipelines or creators sourcing moodboards, but not for users who need private contact details, which the records do not include.

    Try it: open Pexels Stock Media Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Pexels Stock Media Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Pexels Stock Media Scraper a month, before run-start charges and platform usage.

    Pexels Stock Media Scraper was last updated on 2026-07-05. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 674,790 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Pexels Stock Media Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The maxItems control has the largest effect on your bill because charges are applied per result written to the dataset. To find out if the data meets your needs before spending, start with a small batch of 10 results in mode search to inspect the metadata. Result charges apply only to results written to the dataset.

    How do you run Pexels Stock Media Scraper from the API?

    The schema marks 1 of its 14 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~pexels-stock-media-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","searchQuery":"nature","photoIds":["18872916"],"username":"alex-ivanov-773258579","collectionSlug":"aquatic-aesthetic-bw7dkse"}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "searchQuery": "nature",
      "photoIds": [
        "18872916"
      ],
      "username": "alex-ivanov-773258579",
      "collectionSlug": "aquatic-aesthetic-bw7dkse"
    }
    
    run = client.actor("crawlerbros~pexels-stock-media-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "searchQuery": "nature",
      "photoIds": [
        "18872916"
      ],
      "username": "alex-ivanov-773258579",
      "collectionSlug": "aquatic-aesthetic-bw7dkse"
    }
    
    const run = await client.actor('crawlerbros~pexels-stock-media-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.

    Which Pexels Stock Media Scraper inputs matter, and which can you skip?

    The mode control is the primary setting that determines whether you are scraping the global search index, a specific photographer, or a curated collection. Most practitioners should focus on searchQuery and mediaType for their first run while leaving filters like minWidth at zero until they confirm the baseline volume of results.

    • mode (string): What to fetch from Pexels. Default: "search".
    • searchQuery (string): Keyword to search for (mode=search). Example: nature, city skyline, coffee.
    • photoIds (array): Pexels photo IDs or full photo page URLs (mode=byPhotoId: look up these exact photos; mode=similarPhotos: find photos visually/topically similar to each of these). Example: 18872916 or https://www.pexels.com/photo/18872916/. Default: [].
    • username (string): Pexels photographer handle or profile URL (mode=byUser). Example: alex-ivanov-773258579 or https://www.pexels.com/@alex-ivanov-773258579/.
    • collectionSlug (string): Pexels curated collection slug or full collection URL (mode=byCollection). Example: aquatic-aesthetic-bw7dkse or https://www.pexels.com/collections/aquatic-aesthetic-bw7dkse/.
    • mediaType (string): Which kind of media to return. For mode=search this selects between Pexels' separate photo-search and video-search pages (all is treated as photos). For mode=curated/byUser/byCollection, all returns both photos and videos as they naturally appear in the feed. Default: "photos".
    • orientation (string): Filter results by image/video orientation. Default: "all".
    • minWidth (integer): Only return media whose width is at least this many pixels. 0 disables the filter. Default: 0.
    • minHeight (integer): Only return media whose height is at least this many pixels. 0 disables the filter. Default: 0.
    • minDuration (integer): Only return videos at least this many seconds long (videos only; ignored for photos). 0 disables the filter. Default: 0.
    • maxDuration (integer): Only return videos at most this many seconds long (videos only; ignored for photos). 0 disables the filter. Default: 0.
    • peopleCount (string): Filter photo search results by how many people appear in them (mode=search, photos only). Default: "all".

    The other 2 controls, with their defaults, are listed in the input schema on Pexels Stock Media Scraper on Apify.

    Fixed-choice controls: mode accepts search (Search by keyword), curated (Curated / popular feed (homepage)), byPhotoId (Lookup photos by ID or URL), byUser (Photographer portfolio), byCollection (Curated collection), similarPhotos (Similar / related photos); mediaType accepts photos (Photos only), videos (Videos only), all (photos + videos); orientation accepts all (All orientations), landscape, portrait, square; peopleCount accepts all (Any), 0 (No people), 1 (1 person), 2 (2 people).

    What does Pexels Stock Media Scraper return?

    The returned records are suitable for populating digital asset management systems or mockups because they include direct CDN URLs that work with server-side downloaders. The records conspicuously do not include private photographer contact details, as these are not publicly available on Pexels.

    Output per photo (recordType: "photo")

    • photoId, title, description, alt, slug
    • width, height, orientation (landscape / portrait / square), aspectRatio
    • license, featured (Pexels editor's pick)
    • createdAt, publishedAt
    • photographerName, photographerId, photographerUsername, photographerUrl, photographerAvatarUrl, photographerLocation, photographerInstagram, photographerTwitter, photographerIsHero, photographerDonateUrl
    • tags[]
    • imageSmallUrl, imageMediumUrl, imageLargeUrl, imageOriginalUrl, downloadUrl
    • avgColor (hex), colorPalette[] (hex)
    • collectionIds[] - curated collections this photo belongs to (if any)
    • pageUrl, sourceUrl
    • recordType: "photo", scrapedAt

    Output per video (recordType: "video")

    • videoId, title, description, slug
    • width, height, orientation, aspectRatio
    • durationSeconds, fps
    • license, featured
    • createdAt, publishedAt
    • photographerName, photographerId, photographerUsername, photographerUrl, photographerAvatarUrl, photographerLocation, photographerInstagram, photographerTwitter, photographerIsHero, photographerDonateUrl
    • tags[]
    • videoPreviewUrl, thumbnailSmallUrl, thumbnailMediumUrl, thumbnailLargeUrl, downloadUrl
    • videoFiles[] - every available quality: { url, width, height, fps, fileType, downloadUrl }
    • bestVideoUrl - the highest-resolution file, for convenience
    • collectionIds[]
    • pageUrl, sourceUrl
    • recordType: "video", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Pexels Stock Media Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Choose a value for the mode control such as search or byUser to determine which Pexels endpoint to target.
    2. Enter a searchQuery like coffee or nature when using search mode to populate the result set.
    3. Select the mediaType of photos, videos, or all to match your project requirements for file formats.
    4. Set orientation to landscape or portrait if you need assets to fit specific layout dimensions.
    5. Adjust minWidth and minHeight to ensure the media records meet your minimum resolution thresholds.
    6. Configure maxItems up to the 1,000 record limit while keeping the Pexels guest search page cap in mind.
    7. Start the run and monitor the recordType field in the dataset to differentiate between photo and video objects.
    8. Extract the imageOriginalUrl or videoFiles[] for direct CDN access to the high-resolution media files.

    How do you apply it? Three worked playbooks

    These are Pexels Stock Media Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Content creators

    Outcome: Source royalty-free photos and videos for blogs, social media, and presentations

    Configure: Set mode to search, searchQuery to your topic, and mediaType to all.

    Working method: Execute a small test run with maxItems set to 20 to verify the visual relevance of the results. Compare the tags array across the top records to see if a more specific search term is needed. Once verified, scale the run to collect your full required asset library.

    Deliverable: A dataset of direct CDN media links accompanied by full photographer credits and descriptive alt text.

    Stop condition: The run returns zero results, which typically indicates a searchQuery that has no matches in the Pexels index.

    Use case 2: App/website placeholders

    Outcome: Bulk-fetch themed imagery for mockups and prototypes

    Configure: Set mode to curated, orientation to your layout needs, and mediaType to photos.

    Working method: Launch the run using curated mode to pull high-quality editor picks from the homepage feed. Filter the results by avgColor to match your application's primary brand hex code. Save the imageMediumUrl links for fast-loading UI previews in your prototype.

    Deliverable: A JSON file containing direct image URLs categorized by their dominant colors and dimensions.

    Stop condition: The imageOriginalUrl field is missing from more than ten percent of the written records.

    Use case 3: Marketing teams

    Outcome: Pull a specific photographer's or collection's catalog for campaign moodboards

    Configure: Set mode to byUser and enter the photographer handle into the username field.

    Working method: Locate a photographer on Pexels and copy their username slug into the Actor inputs. Run the scraper to collect their entire public portfolio, including photographerBio and social links. Use the photographerPhotosCount to estimate how many runs you need to capture the full catalog.

    Deliverable: A structured catalog of a single photographer's work including EXIF camera metadata and download links.

    Stop condition: The record count is significantly lower than the Pexels profile indicates, suggesting a username typo.

    What breaks, and how do you design around it?

    When you hit the guest pagination limit of approximately 450-480 items, you should narrow your searchQuery or use different filters to access more of the index. If you encounter blocking while running large volumes, consider enabling a proxy for your run to maintain access.

    When should you not use Pexels Stock Media Scraper?

    Avoid this Actor if you require looking up individual videos by their ID, as Pexels' individual video pages are protected more aggressively than photo pages and could not be scraped reliably. If you need stock content from a different library like Mixkit, Mixkit Stock Media Scraper is a better alternative for background audio and effects. For high-volume social media image collection rather than stock photography, Pinterest Media Downloader is the appropriate choice. This tool is also not for users who require original file metadata for every single asset, as those fields are omitted when the photographer's upload did not retain this metadata.

    What should you check before trusting the output?

    • Check that the width and height fields are non-zero integers to confirm successful dimension extraction.
    • Verify that imageOriginalUrl is present in every photo record to ensure you have a direct file link.
    • Confirm that the colorPalette array contains valid hex codes for use in UI styling tasks.
    • Monitor for the absence of photographerInstagram which indicates the profile data was not filled in on Pexels.
    • Validate that the recordType matches your mediaType selection to avoid processing incorrect file formats.

    None of this proves a record is correct. It gives a scheduled Pexels Stock Media Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the free-plan price for 1,000 Pexels results?

    On Apify's free plan, the price is $5.00 per 1,000 results, which is $0.005 per individual record. Since the free plan includes $5.00 of monthly usage, you can scrape up to 1,000 results every month without a credit card.

    How fresh is the data returned by this Actor?

    The Actor reads Pexels' live pages at run time, ensuring results reflect what is on the site. This ensures that the media links and associated metadata are current at the time of collection.

    Why does search mode stop returning items after page 20?

    Pexels' own search-results pagination actually serves only the first ~20 pages of guest/anonymous search results per query. This limits a single search query to approximately 450-480 items. Once you reach this limit, you must set a narrower searchQuery or add filters to source more items from different segments of the index.

    Can I download videos using the data from this scraper?

    Every video record includes a videoFiles array with direct CDN links for different qualities. All imageXxxUrl, videoFiles[].url, thumbnailXxxUrl, and downloadUrl fields are direct CDN links and work everywhere, including curl and server-side downloads.

    Does this scraper provide camera EXIF data for every photo?

    Camera metadata like cameraMake, cameraModel, and photographedAt is only available when using byPhotoId mode, and only if the photographer's upload retained this metadata. If it was stripped, those fields are omitted from the output entirely.

    Where to go next

    When you are ready to run it, open Pexels Stock Media Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Pexels Stock Media Scraper Actor page for the current input schema, pricing tier, and run history.

    If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-25.

    • Actor last updated by its maintainers on 2026-07-05.

    • Run outcome figures cover the 30 day public window ending 2026-09-25.

    • Pexels Stock Media Scraper on Apify

    Featured actors

    Pexels Stock Media Scraper

    Scrape free stock photos and videos from Pexels. Search by keyword, browse curated/popular media, a photographer's portfolio, or a curated collection. Get direct image and video file URLs, photographer credit, tags, colors, and more.

    Run on Apify ↗