Scrape any public Pinterest board from the command line.
Exports structured JSON, LLM-ready Markdown, and optionally caches all images locally — with a beautiful Rich progress UI.
$ pinterest-export https://www.pinterest.com/designmilk/packaging/
──────────────── pinterest-export ────────────────
Board : designmilk/packaging
URL : https://www.pinterest.com/designmilk/packaging/
⏳ Scraping board… 42 pins found so far
✓ Scraped 87 pins.
⠸ Downloading images… ████████░░ 67/87 77% 00:12
✓ Downloaded 85 / 87 images.
┌─ Export Summary ──────────────────────────────┐
│ Board │ designmilk/packaging │
│ Pins scraped │ 87 │
│ Images cached │ 85 │
│ board.json │ ./pinterest-export-output/... │
│ board.md │ ./pinterest-export-output/... │
└───────────────────────────────────────────────┘
pip install pinterest-export
playwright install chromium# Scrape and export JSON + Markdown
pinterest-export https://www.pinterest.com/username/boardname
# Custom output directory
pinterest-export https://www.pinterest.com/username/boardname --output-dir ./my-research
# Also download all images
pinterest-export https://www.pinterest.com/username/boardname --cache-images
# Add Gemini Vision analysis per pin
pinterest-export https://www.pinterest.com/username/boardname --vision
# Increase Gemini analysis parallelism
pinterest-export https://www.pinterest.com/username/boardname --vision --vision-concurrency 10
# Scrape only (no files written)
pinterest-export https://www.pinterest.com/username/boardname --no-export
# Limit to first N pins
pinterest-export https://www.pinterest.com/username/boardname --limit 50Structured metadata for every pin:
{
"board": "username/boardname",
"url": "https://www.pinterest.com/...",
"scraped_at": "2026-03-03T04:22:00Z",
"pin_count": 87,
"pins": [
{
"id": "123456789",
"title": "Minimal packaging concept",
"description": "Clean kraft paper with letterpress...",
"link": "https://www.pinterest.com/pin/...",
"image_url": "https://i.pinimg.com/...",
"board_url": "https://www.pinterest.com/username/boardname/"
}
]
}LLM-optimised Markdown — ready to paste into Claude, GPT, or any AI tool as context for design research, mood board analysis, or trend detection.
When --cache-images is set, all pin images are downloaded to a local cache directory and referenced by their Pinterest image ID. Subsequent exports reuse cached images.
When --vision is enabled (with GEMINI_API_KEY or GOOGLE_API_KEY set), each pin is enriched with:
vision_descriptionvision_tagsvision_colorsvision_stylevision_mood
- Scrapes public Pinterest boards via Playwright (handles infinite scroll)
- Rich live progress UI: real-time pin count + image download progress bar
- JSON export with full structured metadata
- Markdown export optimised for LLM context windows
- Optional Gemini Flash (
gemini-2.0-flash) analysis per pin - Local image cache with concurrent downloads
--limitflag for controlled scrapes--no-exportflag for dry runs / in-memory use
- #6 Theme clustering across boards
- #7 HTML gallery generator
- #11 Config file support (
.pinterest-export.toml) - #12 Watch mode / incremental exports
git clone https://github.com/brtdwchtr/pinterest-export
cd pinterest-export
uv sync
playwright install chromium
uv run pytest tests/See CONTRIBUTING.md for contribution guidelines.
MIT