# Depositphotos Scraper (`deadmist/depositphotos-scraper`) Actor

Scrape Depositphotos search results and contributor portfolios: titles, contributors, publish dates, sizes and every file keyword. A niche report per query shows supply, competition and the top keywords. Pay per file.

- **URL**: https://apify.com/deadmist/depositphotos-scraper.md
- **Developed by:** [Vladyslav Kosenko](https://apify.com/deadmist) (community)
- **Categories:** E-commerce, SEO tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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

## Depositphotos Scraper

Scrape **Depositphotos search results and contributor portfolios** without logging in. For each file you get the **title, contributor, media type, publish date, size, preview**, and optionally **the full keyword list**. Use it for microstock keyword research, competitor portfolio analysis, trend spotting and mood boards.

Each query or portfolio also produces a **niche report**: total results, the share of files published in the last 12 months, top contributors, top keywords and Depositphotos' related searches. In one table you can see whether a niche is saturated or still open.

You pay per file. Proxies are included.

### Features

- **Any source:** keyword search, contributor portfolios, or any Depositphotos search, portfolio or file URL.
- **Every media type:** photos, illustrations, vectors and videos (with duration).
- **Sort:** best match or newest.
- **Keywords:** the full keyword list of each file, usually 30–50 keywords.
- **Niche report:** one summary row per query, so you can compare dozens of keywords at once.
- **Contributor links:** every file comes with the contributor's ID and portfolio URL, ready for a follow-up run.
- **Reliable:** runs on residential proxies by default, and failed requests are retried with fresh sessions.

### Use cases

- **Microstock keyword research:** run a list of topics and compare total results (supply) with how many top results are recent (an open niche).
- **Better keywording:** see which keywords the best-ranked files use, and in what order.
- **Competitor analysis:** track a contributor's portfolio size and newest uploads.
- **Trend monitoring:** schedule a run with `sort: newest` and see what is being uploaded.
- **Creative research:** collect previews and titles for a mood board.

### Input example

```json
{
  "searchQueries": ["christmas background", "remote work", "sunset"],
  "mediaType": "all",
  "sort": "best",
  "maxItemsPerSource": 200,
  "includeKeywords": true,
  "nicheReport": true
}
```

### Output example

A file:

```json
{
  "type": "file",
  "query": "sunset",
  "position": 1,
  "totalResults": 75682175,
  "fileId": 687583414,
  "url": "https://depositphotos.com/vector/natural-landscape-scenery-sunset-beach-background-illustration-687583414.html",
  "title": "Natural landscape scenery sunset behind the beach background illustration",
  "contributor": "abdulgofur1999",
  "contributorId": 82105580,
  "contributorUrl": "https://depositphotos.com/portfolio-82105580.html",
  "mediaType": "vector",
  "isEditorial": false,
  "published": "2023-11-16T07:26:08.000Z",
  "width": 5730,
  "height": 3132,
  "thumbnailUrl": "https://st5.depositphotos.com/82105580/68758/i/450/depositphotos_687583414-stock-illustration-natural-landscape-scenery-sunset-beach.jpg",
  "keywords": ["beautiful", "scenic", "sand", "outdoor", "…"]
}
```

A niche report:

```json
{
  "type": "niche-report",
  "query": "sunset",
  "totalResults": 75682175,
  "sampledFiles": 120,
  "newLast12MonthsPercent": 8.3,
  "editorialPercent": 0.8,
  "uniqueContributors": 68,
  "topContributors": [{ "contributor": "abdulgofur1999", "files": 4 }],
  "topKeywords": [{ "keyword": "sunset", "files": 120 }, { "keyword": "sun", "files": 96 }],
  "relatedSearches": ["sun", "beach background", "beach sunset", "sunrise"]
}
```

Rows have a `type` field (`file`, `niche-report` or `error`), so you can filter them in the dataset or via the API.

### Pricing

| Event | Price |
| --- | --- |
| File | $0.0008 |
| Keywords (only with *Include keywords*) | $0.004 per file |
| Niche report | $0.003 per query or portfolio |

1,000 files cost $0.80, or $4.80 with keywords. A failed request is not charged.

### Tips

- Use `maxItemsPerSource` of 100–200 with keywords for a solid niche report at low cost.
- Portfolios need the numeric seller ID from the portfolio URL (`portfolio-2701349.html`). Each file's `contributorUrl` gives you one.
- Depositphotos does not publish download counts. Use the best-match rank (`position`) as the demand signal.

### FAQ

**Do I need a Depositphotos account?** No. The actor reads public pages only.

**Is it legal?** The actor collects publicly available data. You are responsible for how you use it. Previews are watermarked and copyrighted by their owners.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords or phrases, the same as the Depositphotos search box.

## `contributors` (type: `array`):

Portfolio URLs or seller IDs, e.g. https://depositphotos.com/portfolio-2701349.html or 2701349. Portfolios are listed newest first.

## `startUrls` (type: `array`):

Any Depositphotos search, portfolio or file page. File pages always come with keywords.

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

Applies to search queries and portfolios.

## `sort` (type: `string`):

Best match is Depositphotos' default ranking. Applies to search queries.

## `maxItemsPerSource` (type: `integer`):

Depositphotos lists 100 files per page.

## `includeKeywords` (type: `boolean`):

Opens each file page for its full keyword list (usually 30–50 keywords). Charged as an extra event per file.

## `nicheReport` (type: `boolean`):

Adds one summary row per query or portfolio: total results, share of files published in the last 12 months, top contributors, top keywords and related searches.

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

How many queries, portfolios or URLs run at the same time.

## `maxAttempts` (type: `integer`):

Retries with a fresh proxy session before a request is given up.

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

Residential Apify Proxy is included in the price. Depositphotos drops datacenter connections.

## Actor input object example

```json
{
  "searchQueries": [
    "christmas background",
    "remote work",
    "sunset"
  ],
  "contributors": [
    "https://depositphotos.com/portfolio-2701349.html"
  ],
  "startUrls": [
    "https://depositphotos.com/vectors/sunset.html"
  ],
  "mediaType": "all",
  "sort": "best",
  "maxItemsPerSource": 100,
  "includeKeywords": false,
  "nicheReport": true,
  "maxConcurrency": 3,
  "maxAttempts": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Files and niche reports.

## `overview` (type: `string`):

The overview view of the dataset.

# 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 = {
    "searchQueries": [
        "christmas background"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deadmist/depositphotos-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 = {
    "searchQueries": ["christmas background"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("deadmist/depositphotos-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 '{
  "searchQueries": [
    "christmas background"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call deadmist/depositphotos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deadmist/depositphotos-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/Fe6demyTJKJB999IL/builds/KWXka8SIQpP70i00Z/openapi.json
