# Public Domain Vectors Scraper (`parseforge/public-domain-vectors-scraper`) Actor

Export free public domain clipart from PublicDomainVectors.org: preview image, SVG, AI or EPS download link, tags, category, file size. CSV, Excel, JSON, XML.

- **URL**: https://apify.com/parseforge/public-domain-vectors-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Automation, Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.91 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🎨 Public Domain Vectors Scraper

> 🚀 **Export a whole public domain clipart library in seconds.** 21 fields per illustration, about 71,400 records across 12 categories, every one of them CC0 and free to use commercially.

Public Domain Vectors Scraper turns [PublicDomainVectors.org](https://publicdomainvectors.org) into a structured dataset. Search by keyword, walk a category, follow a tag page or point it at a single artwork, and every result comes back with its preview image, its direct download link, the exact file format and size, the publish date, the lifetime download count, the full tag list and the categories the site files it under.

Coverage is the whole public catalogue: 12 browsable categories holding roughly 71,400 illustrations, from 101 records in Health & Medical to 29,006 in Objects, in SVG, AI and EPS. Listings return 90 cards per page with no deep pagination cap, so a category such as Animals walks all 88 of its pages to exactly the 7,887 records the site advertises. Everything is Creative Commons Zero 1.0, so the artwork can be copied, modified and sold without asking permission.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Designers and illustrators | Build a royalty free asset library that is searchable offline |
| Game and app studios | Bulk source icons, silhouettes and backgrounds with no licence risk |
| Machine learning teams | Assemble CC0 image and caption pairs for training and evaluation |
| Publishers and educators | Illustrate textbooks, decks and worksheets without clearance work |
| Print on demand sellers | Mine the most downloaded artwork for product ideas |
| Marketing and content teams | Keep a tagged internal clipart catalogue that anyone can search |

### 📋 What the Public Domain Vectors Scraper does

> 💡 **Why it matters:** the site publishes tags, categories, file size, publish date and lifetime download counts only on the individual artwork page. Reading a category in a browser gives you a thumbnail and a title. This Actor opens every artwork page, so you get the whole record, and the download count in particular tells you which of two similar illustrations the world actually uses.

- Collects vectors from search keywords, category listings, tag pages and single artwork URLs, in any combination.
- Returns the full size preview image and the WebP thumbnail, so the dataset renders as a visual gallery straight away.
- Gives a direct download link per record. SVG records serve the `.svg` file; AI and EPS records serve a zip holding both.
- Reports the exact format string, file size, publish date and lifetime download count from the artwork page.
- Carries the complete tag list, often 20 or more terms per illustration, plus every category the site files it under.
- Applies the site's own filters: format (SVG, AI, EPS), orientation (horizontal, vertical, square) and sort order (relevance, newest, most downloaded).
- Deduplicates by artwork ID across every source in the run, so a vector that appears in two categories is charged and delivered once.
- Retries the origin's intermittent 502 responses and falls back to residential exit IPs on its own if the site starts refusing direct traffic.

### 🎬 Full Demo (🚧 Coming soon)

A recorded walkthrough is on the way. Until then, the sample records below are straight from a live run.

### 📊 Output

Every row is one illustration. 21 fields, no empty columns, arrays last.

| Field | Type | Description |
| --- | --- | --- |
| 🖼 `imageUrl` | string | Full size preview image (PNG or JPG) |
| 📌 `title` | string | Artwork title as published |
| 🔗 `url` | string | Artwork page on publicdomainvectors.org |
| 🆔 `id` | string | Numeric artwork ID, stable across languages |
| 🔡 `slug` | string | URL slug of the artwork |
| 📝 `description` | string | The site's own description of the illustration |
| ⬇️ `downloadUrl` | string | Direct file download (SVG file, or a zip with AI and EPS) |
| ⚖️ `license` | string | Licence label shown on the page, always Public Domain |
| 📜 `licenseUrl` | string | Canonical CC0 1.0 deed URL |
| 🗂 `fileType` | string | Format string exactly as published, such as `SVG` or `AI,EPS` |
| 💾 `fileSize` | string | File size of the download, such as `680KB` |
| 📅 `publishedDate` | string | Date the artwork was added, `YYYY-MM-DD` |
| 📥 `downloads` | integer | Lifetime download count |
| 🖼 `thumbnailUrl` | string | WebP thumbnail used in listings |
| 📁 `categoryName` | string | Primary category |
| 🧭 `sourceUrl` | string | The listing or URL the record was reached from |
| 🧾 `fileFormats` | array | Formats split out, such as `["AI","EPS"]` |
| 📚 `categories` | array | Every category the artwork is filed under |
| 🏷 `tags` | array | Full tag list from the artwork page |
| 🕒 `scrapedAt` | string | ISO 8601 collection timestamp |
| ❌ `error` | string or null | Populated only on a failed record |

Three real records from a live run:

```json
[
  {
    "imageUrl": "https://publicdomainvectors.org/photos/Butterfly.png",
    "title": "Grayscale origami butterfly vector image",
    "url": "https://publicdomainvectors.org/en/free-clipart/Grayscale-origami-butterfly-vector-image/16431.html",
    "id": "16431",
    "slug": "Grayscale-origami-butterfly-vector-image",
    "description": "Origami butterfly vector clip art. Grayscale illustration of butterfly made out of paper.",
    "downloadUrl": "https://publicdomainvectors.org/download/16431",
    "license": "Public Domain",
    "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
    "fileType": "SVG",
    "fileSize": "25KB",
    "publishedDate": "2014-10-31",
    "downloads": 937,
    "thumbnailUrl": "https://publicdomainvectors.org/tn_img/Butterfly.webp",
    "categoryName": "Animals",
    "sourceUrl": "https://publicdomainvectors.org/search?lang=en&q=butterfly",
    "fileFormats": ["SVG"],
    "categories": ["Animals", "Objects"],
    "tags": ["cartoon", "purple", "butterfly", "flying", "origami", "clip art", "clipart", "cute", "spots", "spring", "summer", "wings", "abstract", "animal", "decorative", "insect", "flower", "color", "svg", "paper", "Japan", "Japanese", "make", "gray", "grayscale", "openclipart"],
    "scrapedAt": "2026-09-08T06:10:04.133Z",
    "error": null
  },
  {
    "imageUrl": "https://publicdomainvectors.org/photos/butterfly.jpg",
    "title": "Butterfly",
    "url": "https://publicdomainvectors.org/en/free-clipart/Butterfly/89786.html",
    "id": "89786",
    "slug": "Butterfly",
    "description": "A butterfly, vector clip art.",
    "downloadUrl": "https://publicdomainvectors.org/download/89786",
    "license": "Public Domain",
    "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
    "fileType": "AI,EPS",
    "fileSize": "680KB",
    "publishedDate": "2022-05-23",
    "downloads": 841,
    "thumbnailUrl": "https://publicdomainvectors.org/tn_img/butterfly.webp",
    "categoryName": "Animals",
    "sourceUrl": "https://publicdomainvectors.org/search?lang=en&q=butterfly",
    "fileFormats": ["AI", "EPS"],
    "categories": ["Animals"],
    "tags": ["butterfly", "insect", "bug", "fly", "wildlife", "animal", "eps", "ai"],
    "scrapedAt": "2026-09-08T06:10:04.134Z",
    "error": null
  },
  {
    "imageUrl": "https://publicdomainvectors.org/photos/blue_butterfly.png",
    "title": "Blue Butterfly Vector",
    "url": "https://publicdomainvectors.org/en/free-clipart/Blue-Butterfly-Vector/2095.html",
    "id": "2095",
    "slug": "Blue-Butterfly-Vector",
    "description": "Vector image of a blue butterfly, from 1847, France. Original image can be found at http://thegraphicsfairy.com/vintage-natural-history-printable-beautiful-blue-butterfly/",
    "downloadUrl": "https://publicdomainvectors.org/download/2095",
    "license": "Public Domain",
    "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
    "fileType": "SVG",
    "fileSize": "2923KB",
    "publishedDate": "2013-11-19",
    "downloads": 6240,
    "thumbnailUrl": "https://publicdomainvectors.org/tn_img/blue_butterfly.webp",
    "categoryName": "Animals",
    "sourceUrl": "https://publicdomainvectors.org/search?lang=en&q=butterfly",
    "fileFormats": ["SVG"],
    "categories": ["Animals"],
    "tags": ["animals", "blue", "bug", "butterfly", "fauna", "flying", "insect", "wings", "color", "colors", "svg"],
    "scrapedAt": "2026-09-08T06:10:04.134Z",
    "error": null
  }
]
```

Export the dataset as CSV, Excel, JSON or XML from the Storage tab, or pull it straight from the Apify API.

### ✨ Why choose this Actor

- **Detail level, not thumbnail level.** Tags, categories, description, file size, publish date and download counts live only on the artwork page, and this Actor opens every one of them.
- **Download links you can actually use.** `downloadUrl` resolves to the real file, an `.svg` for SVG records and a zip carrying the AI and EPS pair for the rest.
- **A visual dataset.** Both the full preview and the WebP thumbnail come back, so the Apify table renders as a gallery and any downstream tool has an image to show.
- **Honest coverage.** 12 categories, roughly 71,400 records, and the counts in this README were measured against the live site rather than estimated.
- **The site's real filters.** Format, orientation and sort order were each tested against a live listing and provably change the result set. Knobs that did nothing were not shipped.
- **Built for a flaky origin.** The site answers 502 in bursts and recovers immediately; every request retries with a growing backoff, so a hiccup does not cost you rows.
- **Zero licensing homework.** Every record is CC0 1.0, with the deed URL carried in the row.

### 📈 How it compares to alternatives

| Approach | Preview image | Download link | Tags and categories | Download counts | Bulk export |
| --- | --- | --- | --- | --- | --- |
| Browsing the site by hand | ✅ | ✅ | ✅ | ✅ | ❌ |
| A generic HTML scraper | ✅ | ⚠️ needs the artwork page | ⚠️ needs the artwork page | ❌ | ⚠️ you build it |
| A stock photo API | ✅ | ⚠️ licence bound | ✅ | ⚠️ rarely | ⚠️ quota bound |
| **Public Domain Vectors Scraper** | ✅ preview and thumbnail | ✅ direct file | ✅ full lists | ✅ lifetime count | ✅ CSV, Excel, JSON, XML |

Stated plainly: the site publishes no view counts, no uploader identity and no pixel dimensions anywhere on the public page, so this Actor does not invent them. There is one download URL per record rather than one per format. Every record needs its own artwork page request, which works out to roughly 2.8 records per second.

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free usage credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and go to the input tab.
3. Type one or more keywords under Search Terms, pick one or more Categories, or paste category, tag or artwork URLs under Start URLs. Leave everything empty to walk the whole library.
4. Set Max Items. Free accounts preview 10 records; paid accounts go up to 1,000,000.
5. Optionally narrow by format, orientation or sort order under Filters.
6. Click Start, then open the Storage tab and export as CSV, Excel, JSON or XML.

Nothing else is required. The proxy is off by default because the site answers direct requests, and the Actor escalates to residential exit IPs on its own if that ever changes.

### 💼 Business use cases

**Asset library for a design team.** Pull every category once, keep the dataset in a warehouse, and give designers an internal search over 71,400 CC0 illustrations with tags, formats and file sizes. No one has to wonder whether a graphic is cleared for commercial use.

**Game and app art sourcing.** Filter to SVG, sort by most downloaded, and pull the top few thousand silhouettes and icons. The download count is a real popularity signal, so you can pick the illustration people actually reach for instead of guessing from a thumbnail.

**Training data with clean provenance.** CC0 artwork with a human written description and 20 or more tags per record is close to ideal for image and caption training sets. The licence URL travels in the row, so provenance is documented per record rather than per dataset.

**Print on demand and merchandise research.** Sort by downloads inside a niche category, cross reference the tag lists, and you have a ranked view of the motifs that already carry demand, alongside a source file you are allowed to sell.

### 🔌 Automating Public Domain Vectors Scraper

- **Schedule it.** Run it weekly with the sort set to newest to keep a mirror of everything added since your last pull.
- **Make and Zapier.** Trigger on run completion and fan new records into Airtable, Notion or a Slack channel.
- **Slack.** Post the day's new illustrations with their preview images into a design channel.
- **Airbyte and warehouses.** Sync the dataset into BigQuery, Snowflake or Postgres and query it next to your own asset catalogue.
- **GitHub Actions.** Call the Apify API on a cron, commit the JSON, and let a static site build a browsable gallery from it.
- **Google Drive.** Drop the CSV into a shared folder so non technical teammates can filter it in Sheets.

### 🌟 Beyond business use cases

**Research.** Study how a public domain repository grows: publish dates plus download counts give you a decade of adoption data on 71,400 works.

**Personal projects.** Build a family of print ready posters, a zine, or a set of laser cut stencils entirely from CC0 sources.

**Non-profit and education.** Illustrate curricula, museum signage or health leaflets without a clearance budget or a legal review.

**Experimentation.** Feed the tag lists into an embedding model and see how a crowd tagged clipart library clusters, or compare tags with the descriptions to test caption quality.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant:

> I am using the ParseForge Public Domain Vectors Scraper on Apify. It returns one row per illustration with imageUrl, title, url, id, slug, description, downloadUrl, license, licenseUrl, fileType, fileSize, publishedDate, downloads, thumbnailUrl, categoryName, sourceUrl, fileFormats, categories, tags, scrapedAt and error. Help me design a query that finds the 200 most downloaded SVG illustrations tagged with a given theme, and write the code to fetch their files.

### ❓ Frequently Asked Questions

#### What exactly is one result?

One public domain illustration, with all 21 fields filled from its own artwork page.

#### Where does the data come from?

Publicly accessible pages on publicdomainvectors.org: category listings, the site's search, tag pages and individual artwork pages. Nothing behind a login.

#### Can I really use the artwork commercially?

The site publishes everything under Creative Commons Zero 1.0, and every row carries the deed URL so you can verify it yourself. Copy, modify, distribute and sell, no permission needed.

#### How many illustrations are available in total?

About 71,400 across 12 categories, ranging from 101 in Health & Medical to 29,006 in Objects. The Actor logs the live total for each source when a run starts.

#### Does the download link give me the actual file?

Yes. SVG records serve the `.svg` directly; AI and EPS records serve a zip that contains both files. There is one download URL per record because that is all the site publishes.

#### Why is there no image width and height?

The site does not publish pixel dimensions anywhere on the public artwork page. Rather than ship an always empty column, it was left out. The same goes for view counts and uploader identity.

#### Can I get more than 90 results from one category?

Yes. Listings are 90 cards per page and there is no deep pagination cap, so the Actor keeps paging until it reaches your item limit or the end of the category.

#### How fast is it?

Roughly 2.8 records per second, because each record needs its own artwork page request. A 1,000 record run lands in about six minutes.

#### Do I need a proxy?

No. The site answers direct requests, so the proxy is off by default. If your network is rate limited you can turn Apify Proxy on, and the Actor also switches to residential exit IPs by itself if the site starts refusing direct traffic.

#### What happens if a page fails?

Every request retries five times with a growing backoff, which absorbs the origin's occasional 502 responses. A record that still cannot be read is skipped and counted in the run log rather than delivered as a broken row.

#### Can I scrape one specific illustration?

Yes. Paste its artwork URL into Start URLs. Mixed inputs work too: several keywords, several categories and a handful of artwork URLs in the same run.

#### Are duplicates removed?

Yes. Records are deduplicated by artwork ID across every source in a run, so an illustration filed under two categories is delivered once.

#### Which languages does it return?

English. The site mirrors every page into 22 languages, and the English route is the one the Actor reads so titles, descriptions and tags stay consistent.

### 🔌 Integrate with any app

Every run writes to an Apify dataset, reachable from the REST API, the JavaScript and Python clients, and the official integrations for Make, Zapier, Airbyte, Slack, Google Drive, GitHub and webhooks. Point any of them at the dataset ID and the rows arrive in the shape shown above.

### 🔗 Recommended Actors

- [Met Museum Scraper](https://apify.com/parseforge/met-museum-scraper?fpr=vmoqkp)
- [Art Institute of Chicago Scraper](https://apify.com/parseforge/art-institute-of-chicago-scraper?fpr=vmoqkp)
- [NASA APOD Images Scraper](https://apify.com/parseforge/apod-nasa-images-scraper?fpr=vmoqkp)
- [Wikimedia Commons WikiProject Scraper](https://apify.com/parseforge/wikimedia-commons-wikiproject-scraper?fpr=vmoqkp)

***

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input and what you expected.

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with, endorsed by or sponsored by PublicDomainVectors.org. It collects only publicly available data from pages that require no login.

# Actor input Schema

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

Category, search, tag or single vector pages from publicdomainvectors.org. Example: https://publicdomainvectors.org/en/free-clipart/animals or https://publicdomainvectors.org/en/free-clipart/Silhouette-of-a-crab/92843.html

## `searchTerms` (type: `array`):

Keywords to search the library for, one per line. Each term is run against the site's own search and paginated until the item limit is reached.

## `categorySlugs` (type: `array`):

Browse one or more of the site's own categories. Every value listed here was verified against the live site.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `fileType` (type: `string`):

Keep only vectors published in a given format. All formats are public domain either way.

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

Keep only artwork with the given aspect ratio.

## `sortBy` (type: `string`):

Order the listing before it is collected. Sorting by downloads surfaces the most reused artwork first.

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

PublicDomainVectors.org is open to direct requests, so the proxy is off by default. Turn it on if your network is rate limited; the Actor also falls back to residential IPs on its own if the site starts refusing direct traffic.

## Actor input object example

```json
{
  "searchTerms": [
    "butterfly"
  ],
  "maxItems": 10,
  "fileType": "any",
  "orientation": "any",
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Preview image, title, download link and key specs for every vector.

## `fullData` (type: `string`):

Complete dataset with all 21 fields per vector.

# 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 = {
    "searchTerms": [
        "butterfly"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/public-domain-vectors-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 = {
    "searchTerms": ["butterfly"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/public-domain-vectors-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 '{
  "searchTerms": [
    "butterfly"
  ],
  "maxItems": 10
}' |
apify call parseforge/public-domain-vectors-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/public-domain-vectors-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/6Zb8O6ld1RihZLsz7/builds/R9xDeaW3omD7eW0Ea/openapi.json
