# Free Image Search - Royalty-Free Photos with License Info (`kantolabs/free-image-search`) Actor

Search 100M+ freely licensed images on Wikimedia Commons and get only pictures you may reuse: original and thumbnail URLs, size, license (CC0, public domain, CC BY, CC BY-SA), author and a ready-to-paste attribution line. Filter by license, size, orientation and format. $1 per 1,000 images.

- **URL**: https://apify.com/kantolabs/free-image-search.md
- **Developed by:** [Kanto Labs](https://apify.com/kantolabs) (community)
- **Categories:** AI, Developer tools
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 image founds

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

## Free Image Search - Royalty-Free Photos You Can Legally Reuse

Search **100+ million freely licensed images** on Wikimedia Commons and get back only pictures you are
**allowed to use** - in blog posts, product pages, ads, apps, slide decks and AI pipelines - each with
its **license, author and a ready-to-paste attribution line**, plus direct links to the **full-size
original** and a **thumbnail**.

Filter by **license** (public domain / CC0 only, or no share-alike), **minimum size**,
**orientation** and **file type**. **$1 per 1,000 images.**

### Why not just scrape Google Images?

Google Images scrapers return pictures that **belong to someone else**: using them on your site or in
an ad is copyright infringement unless you find and clear every license yourself - and scraping
Google breaks its terms. Every file on Wikimedia Commons is published under a **free license that
allows commercial use** (public domain, CC0, CC BY, CC BY-SA...), checked by the Commons community,
and this Actor reads it through the **official MediaWiki API**. You get the license with every image,
so compliance is a copy-paste.

### What you can use it for

- **Content and SEO teams** - a legal featured image for every article; the `attribution` field is the credit line to paste under it.
- **E-commerce and marketing** - landmarks, food, animals, nature and city shots at print resolution (filter `minWidth: 3000`).
- **Apps, games and slide decks** - maps, flags, diagrams and icons as SVG (`fileTypes: ["svg"]`).
- **AI and ML** - build image datasets with clear license metadata, or give an AI agent a "find me a picture I may use" tool via the Apify MCP server.
- **Education and publishing** - historical photos, artworks and maps, most of them public domain.

### Input

| Field | What it does | Default |
|---|---|---|
| `queries` | One search per line | `golden retriever puppy`, `coffee cup`, `tokyo skyline night` |
| `maxResultsPerQuery` | Images per search, after filters | 20 |
| `license` | `any` (all free licenses), `commercialNoShareAlike` (PD, CC0, CC BY - use anywhere with credit), `noAttribution` (PD and CC0 only - no credit needed) | `any` |
| `minWidth` / `minHeight` | Minimum pixel size | 0 |
| `orientation` | `any`, `landscape`, `portrait`, `square` | `any` |
| `fileTypes` | `jpg`, `png`, `webp`, `gif`, `svg`, `tiff` | jpg, png, webp |
| `thumbnailWidth` | Width of the preview link (the original is always included) | 800 |
| `excludeRestricted` | Skip files flagged with trademark, personality-rights or insignia restrictions (recommended for ads) | `false` |
| `language` | Preferred language of titles and descriptions | `en` |

```json
{
    "queries": ["electric car charging", "sushi platter", "hiking boots"],
    "license": "commercialNoShareAlike",
    "minWidth": 1600,
    "orientation": "landscape",
    "maxResultsPerQuery": 25,
    "excludeRestricted": true
}
```

### Output

Real results from cloud runs on 2026-09-23. Default input (first 3 of 20 per search):

| Search | # | Title | Size | License | Author |
|---|---|---|---|---|---|
| golden retriever puppy | 1 | Callie the golden retriever puppy | 2048x1536 | CC BY 3.0 | MichaelMcPhee |
| golden retriever puppy | 2 | Golden Retriever Puppy 2012 01 | 1280x960 | CC BY-SA 4.0 | Johannnes89 |
| coffee cup | 1 | A small cup of coffee | 1600x1200 | CC BY-SA 2.0 | Julius Schorzman |
| coffee cup | 3 | Gray espresso cup with amaretto | 4417x4160 | CC BY-SA 4.0 | Friedrich Haag |
| tokyo skyline night | 1 | Tokyo Tower, Minato City | 5991x3370 | CC BY 4.0 | David Kernan |
| tokyo skyline night | 2 | Minato City, Tokyo, Japan (Night) | 4622x2600 | CC BY 4.0 | David Kernan |

With the filtered input above (no share-alike, at least 1600 px wide, landscape): 97 images, all
CC0, public domain or CC BY - for example *Close-up of an electric car charging* (5887x3917, CC BY 2.0,
Ivan Radic) and *Honda electric car charging on private parking lot in Tokyo* (4080x3072, CC0). One
full item:

```json
{
    "query": "sushi platter",
    "rank": 1,
    "title": "Sushi Plate in Organic Sushi Prague 4",
    "fileName": "Sushi Plate in Organic Sushi Prague 4.jpg",
    "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/4/48/Sushi_Plate_in_Organic_Sushi_Prague_4.jpg",
    "thumbnailUrl": "https://thumb.wikimedia.org/wikipedia/commons/thumb/4/48/Sushi_Plate_in_Organic_Sushi_Prague_4.jpg/960px-Sushi_Plate_in_Organic_Sushi_Prague_4.jpg",
    "pageUrl": "https://commons.wikimedia.org/wiki/File:Sushi_Plate_in_Organic_Sushi_Prague_4.jpg",
    "width": 4608,
    "height": 3456,
    "orientation": "landscape",
    "megapixels": 15.93,
    "fileSizeBytes": 4479848,
    "mimeType": "image/jpeg",
    "license": "CC0",
    "licenseUrl": "http://creativecommons.org/publicdomain/zero/1.0/deed.en",
    "licenseFamily": "public-domain",
    "attributionRequired": false,
    "shareAlike": false,
    "commercialUseAllowed": true,
    "author": "Mojmir Churavy",
    "credit": "Own work",
    "attribution": "\"Sushi Plate in Organic Sushi Prague 4\" by Mojmir Churavy, CC0 (http://creativecommons.org/publicdomain/zero/1.0/deed.en), via Wikimedia Commons",
    "attributionHtml": "<a href=\"https://commons.wikimedia.org/wiki/File:Sushi_Plate_in_Organic_Sushi_Prague_4.jpg\">Sushi Plate in Organic Sushi Prague 4</a> by Mojmir Churavy, <a href=\"http://creativecommons.org/publicdomain/zero/1.0/deed.en\">CC0</a>, via Wikimedia Commons",
    "description": "Sushi plate in Organic Sushi restaurant Prague 4",
    "dateCreated": "2023-11-16 20:17:33",
    "uploaded": "2023-12-18T10:22:43Z",
    "categories": ["CC-Zero", "Self-published work", "Sushi platters"],
    "assessments": [],
    "restrictions": [],
    "source": "Wikimedia Commons"
}
```

| Field | Meaning |
|---|---|
| `licenseFamily` | `public-domain` (PD, CC0), `attribution` (CC BY), `share-alike` (CC BY-SA, GFDL...), `other-free` |
| `attributionRequired` / `shareAlike` | What the license asks of you: credit the author / publish adaptations under the same license |
| `attribution` / `attributionHtml` | Credit line in the usual "Title by Author, License, via Wikimedia Commons" form |
| `assessments` | Community quality marks: `featured`, `quality`, `potd` (picture of the day)... |
| `restrictions` | Non-copyright restrictions such as `trademarked` or `personality` rights |

### Pricing

Pay per event: **$0.001 per image returned** (plus a $0.00005 start fee).

| Images | You pay |
|---|---|
| 20 (one search, default) | $0.02 |
| 1,000 | $1.00 |
| 10,000 | $10.00 |

Filters are applied **before** you are charged - you pay only for images that match. A search with no
match returns one free row with an explanation. Set "Maximum cost per run" and the run stops cleanly
when it is reached.

### FAQ

**Can I really use these commercially?** Wikimedia Commons accepts only free licenses that allow
commercial use. Follow the license: credit the author when `attributionRequired` is true, and share
adaptations alike when `shareAlike` is true (or pick `license: noAttribution` / `commercialNoShareAlike`).
People, logos and buildings can carry extra rights - use `excludeRestricted` and check `restrictions`
for ads. This is not legal advice.

**What does it find well?** Concrete subjects: animals, plants, food, places, landmarks, cities,
buildings, vehicles, objects, historical events, maps, artworks and scientific images. Abstract "stock
photo" ideas (for example *remote work*, *success*) return fewer good matches than on commercial stock
sites - search for the concrete scene instead (*laptop on desk*).

**Can I download the files?** The `imageUrl` links point to the original files and can be downloaded
directly. To get a ZIP, resize or convert, pass them to
[Bulk Image Downloader](https://apify.com/kantolabs/bulk-image-downloader); to enlarge small ones, use
[AI Image Upscaler](https://apify.com/kantolabs/ai-image-upscaler).

**Is the ranking the same as on Commons?** Yes - Commons' own search relevance, with your filters
applied on top.

### Data source

Media and metadata: [Wikimedia Commons](https://commons.wikimedia.org), read through the official
MediaWiki API. Each file's license is set by its author and shown in the results. This Actor is not
affiliated with the Wikimedia Foundation.

### Related Actors by Kanto Labs

- [Bulk Image Downloader](https://apify.com/kantolabs/bulk-image-downloader) - download, convert and ZIP image lists
- [AI Image Upscaler](https://apify.com/kantolabs/ai-image-upscaler) - Real-ESRGAN 2x / 4x upscaling
- [Image to Text OCR](https://apify.com/kantolabs/image-to-text-ocr)
- [Topic Trends - Google Trends Alternative](https://apify.com/kantolabs/wikipedia-trends) - find which topics to illustrate

# Actor input Schema

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

One search per line, e.g. `golden retriever puppy`, `eiffel tower night`, `vintage bicycle`. English works best; other languages work too.

## `maxResultsPerQuery` (type: `integer`):

How many images to return for each search term (after filters). You pay per image returned.

## `license` (type: `string`):

**Any free license**: everything on Wikimedia Commons (all allow commercial use; many require attribution, some require share-alike). **No share-alike**: public domain, CC0 and CC BY only - use anywhere with credit. **No attribution needed**: public domain and CC0 only.

## `minWidth` (type: `integer`):

Only images at least this wide. 0 = any.

## `minHeight` (type: `integer`):

Only images at least this tall. 0 = any.

## `orientation` (type: `string`):

Landscape, portrait or square images only.

## `fileTypes` (type: `array`):

Formats to include: jpg, png, webp, gif, svg, tiff.

## `thumbnailWidth` (type: `integer`):

Width of the `thumbnailUrl` preview (Wikimedia serves standard sizes, so you may get the next size up). `imageUrl` is always the full original.

## `excludeRestricted` (type: `boolean`):

Skip files marked with non-copyright restrictions (trademarks, personality rights, insignia...). Recommended for advertising use.

## `language` (type: `string`):

Preferred language for titles and descriptions (`en`, `de`, `fr`, `es`, `ja`...), when the file page has one.

## Actor input object example

```json
{
  "queries": [
    "golden retriever puppy",
    "coffee cup",
    "tokyo skyline night"
  ],
  "maxResultsPerQuery": 20,
  "license": "any",
  "minWidth": 0,
  "minHeight": 0,
  "orientation": "any",
  "fileTypes": [
    "jpg",
    "png",
    "webp"
  ],
  "thumbnailWidth": 800,
  "excludeRestricted": false,
  "language": "en"
}
```

# Actor output Schema

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

No description

# 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": [
        "golden retriever puppy",
        "coffee cup",
        "tokyo skyline night"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kantolabs/free-image-search").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": [
        "golden retriever puppy",
        "coffee cup",
        "tokyo skyline night",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kantolabs/free-image-search").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": [
    "golden retriever puppy",
    "coffee cup",
    "tokyo skyline night"
  ]
}' |
apify call kantolabs/free-image-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kantolabs/free-image-search"
        }
    }
}
```

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/POh19RMPdf7UGbC5h/builds/5crsJjuUZKxiXVjIT/openapi.json
