# Dreamstime Scraper - Downloads, Keywords & Best Sellers (`devcolton/dreamstime-scraper`) Actor

Dreamstime search results with per-image download counts, level, full keyword lists and contributor, plus keyword summaries of what sells: best sellers, median downloads and the top keywords of best-selling images.

- **URL**: https://apify.com/devcolton/dreamstime-scraper.md
- **Developed by:** [Colton](https://apify.com/devcolton) (community)
- **Categories:** E-commerce, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Dreamstime Scraper — download counts, keywords and best sellers

**Dreamstime Scraper** exports Dreamstime search results with each image's **download count**, **Dreamstime level**, **full keyword list**, contributor and publish date. A **keyword summary** shows what actually sells: best sellers, typical download counts, and the keywords best-selling images use.

Dreamstime is one of the few stock agencies that shows per-image download counts, which makes it a rare source of **real stock-photo sales data**.

### What can this Actor do?

- ⬇️ **Download counts** for every result (as shown on Dreamstime).
- 🏷️ **Full keyword lists** of each image, to learn how best sellers are keyworded.
- 🏆 **Best sellers per keyword**: the 10 most-downloaded results with links.
- 📊 **Keyword research summary**: median and top-10% downloads, level mix, upload years, top keywords and top contributors by downloads.
- 🖼️ **Photos, illustrations or videos**, up to thousands of results per keyword.

### What data can I get?

| Field | Description |
|---|---|
| `title`, `description`, `url`, `thumbnailUrl` | The image |
| `downloads` | Download count shown by Dreamstime |
| `level` | Dreamstime level 0–5 (rises with sales) |
| `keywords`, `keywordCount` | The contributor's keywords |
| `contributor`, `datePublished` | Who uploaded it and when |

Keyword summary rows add `downloadsMedian`, `downloadsP90`, `levelMix`, `uploadYearMix`, `topKeywordsByDownloads`, `topContributorsByDownloads` and `bestSellers`.

### How to use Dreamstime Scraper

1. Click **Try for free** and sign in (new Apify accounts get free monthly credit).
2. Enter **search queries**, e.g. `coffee shop`, `halloween`.
3. Keep **Fetch downloads, level & keywords** on. That's what makes the sales data possible.
4. Click **Start**, then open the **Output** tab. The keyword summary row for each query comes last.

### Input example

```json
{
  "queries": ["coffee shop", "halloween"],
  "mediaType": "all",
  "maxItemsPerQuery": 80
}
```

### Output example

Keyword summary:

```json
{
  "type": "keyword-summary",
  "query": "coffee shop",
  "totalResults": 761842,
  "sampleSize": 160,
  "downloadsMedian": 19,
  "downloadsP90": 111,
  "topKeywordsByDownloads": [ { "keyword": "coffee", "downloads": 5927, "usedBy": 159 }, { "keyword": "shop", "downloads": 5872, "usedBy": 157 } ],
  "bestSellers": [
    { "title": "Wood table top Bar with blur night cafe background", "downloads": 388, "url": "https://www.dreamstime.com/wood-table-top-bar-blur-night-cafe-background-wood-table-top-bar-blur-night-cafe-background-lifestyle-celebration-image112760783" }
  ]
}
```

Result:

```json
{
  "type": "item",
  "query": "coffee shop",
  "rank": 3,
  "title": "A vector illustration of people working in a coffee shop",
  "downloads": 32,
  "level": 5,
  "contributor": "Artisticco Llc",
  "datePublished": "2014-03-21",
  "keywordCount": 37,
  "keywords": ["barista", "beverage", "business", "cafe", "cartoon", "coffee"],
  "url": "https://www.dreamstime.com/stock-photography-people-working-coffee-shop-vector-illustration-image38898182"
}
```

### How much does it cost?

You pay only for results: **$0.003 per result with download stats** ($3 per 1,000), **$0.001 per search-only result**, and **$0.003 per keyword summary**. Proxies are included and there's no start fee.

### Tips and limits

- **40–240 results per keyword** is plenty for research.
- Dreamstime **hides stats on very recent uploads** (usually images without sales yet). They come back with `statsShown: false` and `downloads: null`, and the summary reports their share as `shareWithoutStats`.
- Runs are paced to stay friendly to Dreamstime. Large runs take a few minutes.

### Other Actors by DevColton

| Actor | What it does |
|---|---|
| [Google Trends Explorer](https://apify.com/DevColton/google-trends-explorer) | Interest over time, by region and related queries for any keyword |
| [iStock & Getty Images Scraper](https://apify.com/DevColton/istock-getty-images-scraper) | Stock photo search results and keyword research |
| [Seek, Jobstreet & JobsDB Jobs Scraper](https://apify.com/DevColton/seek-jobstreet-jobsdb-scraper) | Jobs from 8 Asia-Pacific countries with salaries and applicant counts |
| [Envato Market Scraper](https://apify.com/DevColton/envato-market-scraper) | ThemeForest and CodeCanyon items with sales, prices and ratings |
| [Tori, FINN, Blocket & DBA Scraper](https://apify.com/DevColton/tori-finn-blocket-dba-scraper) | Second-hand listings from Finland, Norway, Sweden and Denmark |
| [IKEA Products & Prices Scraper](https://apify.com/DevColton/ikea-products-prices-scraper) | IKEA prices in 41 countries, compared in USD |
| [idealo Scraper](https://apify.com/DevColton/idealo-price-comparison-scraper) | Prices and every shop's offer on idealo.de and idealo.at |
| [Career Site Jobs Scraper](https://apify.com/DevColton/ats-career-sites-jobs-scraper) | Jobs from Greenhouse, Lever, Ashby, Workday and SmartRecruiters career pages |
| [Bayt Jobs Scraper](https://apify.com/DevColton/bayt-jobs-scraper) | Jobs in the UAE, Saudi Arabia, Qatar and the Middle East |

### FAQ

#### Is it legal to scrape this data?

This Actor collects only publicly available data that anyone can see in a browser without logging in. It doesn't access accounts or private data. You're responsible for how you use the data: check the website's terms and the laws that apply to you, especially if you store personal information.

#### Can I use it with the API, Python, Google Sheets or Zapier?

Yes. You can start runs and fetch results through the [Apify API](https://docs.apify.com/api/v2) or the official [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) clients, and send results to Google Sheets, Zapier, Make, n8n or a webhook.

#### Can I run it on a schedule?

Yes. In Apify Console, open **Schedules** to run it hourly, daily or weekly, and get the new data automatically.

#### Something isn't working, or I need a feature

Open an issue in the **Issues** tab. Issues get a quick reply, and feature requests are welcome. Custom scraping work is also possible; mention it in an issue.

# Actor input Schema

## `queries` (type: `array`):

Keywords to search on Dreamstime, one per line (e.g. 'coffee shop', 'halloween'). Each query gets its own keyword summary.

## `mediaType` (type: `string`):

Restrict results to photos, illustrations or videos.

## `maxItemsPerQuery` (type: `integer`):

How many results to collect per keyword. Dreamstime shows 80 per page; 40–240 is plenty for research.

## `includeDetails` (type: `boolean`):

Opens each result's page to read its download count, Dreamstime level, full keyword list, contributor and publish date. Needed for the best-seller and keyword analysis.

## `includeItems` (type: `boolean`):

Turn off to get only one keyword-summary row per query.

## `maxConcurrency` (type: `integer`):

Higher is faster but more likely to be rate-limited.

## `maxRetries` (type: `integer`):

Retries with a fresh proxy session when Dreamstime rate-limits.

## `proxyConfiguration` (type: `object`):

Residential proxy is the default because Dreamstime blocks datacenter IPs quickly. Proxy costs are included in the price.

## Actor input object example

```json
{
  "queries": [
    "coffee",
    "remote work"
  ],
  "mediaType": "all",
  "maxItemsPerQuery": 40,
  "includeDetails": true,
  "includeItems": true,
  "maxConcurrency": 3,
  "maxRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All results in the default dataset (overview table).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "coffee",
        "remote work"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devcolton/dreamstime-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": [
        "coffee",
        "remote work",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("devcolton/dreamstime-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "coffee",
    "remote work"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call devcolton/dreamstime-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devcolton/dreamstime-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/RRtw0UBxFY4k0gciR/builds/YvbilGjvF3eHhEfdr/openapi.json
