---
name: shotlane
description: Screenshot any public web page, read pages as clean Markdown (JavaScript rendered), and render HTML or URLs to PDF using the Shotlane API. Use when the user wants to see what a website looks like, check a deployed page or layout on desktop/mobile, capture a page or element as an image, extract an article or docs page as text for analysis, or produce a PDF (invoices, reports) from HTML.
---

# Shotlane: screenshots, page reading and PDFs

Shotlane renders pages in a real Chromium browser, so JavaScript-heavy sites (React, Next.js, docs portals) work. Every successful call costs the user 1 credit; failed calls are free.

## Choosing the right operation

| User wants… | Use | Notes |
|---|---|---|
| To *see* a page, check a design/layout, compare desktop vs mobile, spot visual bugs | **screenshot** | Default viewport 1280×800. Add `full_page` for the whole page. |
| The *text/content* of a page (summarize, quote, answer questions, extract data) | **read** (Markdown) | Much cheaper in tokens than a screenshot. Prefer this for anything text-based. |
| A PDF document (invoice, report, printable page) | **pdf** | Pass complete HTML, or a URL. |

If MCP tools named `screenshot`, `read_page` and `html_to_pdf` are available, call them directly. Otherwise use the bundled script (needs `SHOTLANE_API_KEY`; a free key with 100 credits is at https://shotlane.dev):

```bash
python scripts/shotlane.py screenshot https://example.com --full-page --out page.png
python scripts/shotlane.py screenshot https://example.com --device iphone --out mobile.png
python scripts/shotlane.py read https://example.com/blog/post > post.md
python scripts/shotlane.py pdf --html invoice.html --paper Letter --out invoice.pdf
```

## Tips that avoid wasted calls

- **Mobile layouts:** use device `iphone` (393 px) or `ipad`; widths ≤ 480 px get a mobile user agent automatically.
- **One element only:** pass a CSS `selector` (e.g. `main`, `#pricing`, `.chart`) instead of a full-page capture.
- **Content loads late** (charts, animations, lazy SPAs): add `delay` (ms, e.g. 1500) or `wait_for_selector`.
- **Cookie banners and ads** are hidden automatically by the MCP tools; with the script use `--clean`.
- **Long pages:** `read` returns the main article by default; use `--whole-page` (`main_content=false`) for navigation-heavy pages like listings or forums.
- **Errors:** `401` = missing/invalid key, `402` = out of credits (tell the user to top up at https://shotlane.dev/pricing), `422` = the page could not be loaded (site down, blocked, or selector not found). Only public URLs work — private/internal addresses are refused.
- Do not loop over many URLs one by one for large batches; suggest the bulk tool at https://shotlane.dev/bulk instead.

## API reference

Full docs: https://shotlane.dev/docs · Machine-readable: https://shotlane.dev/llms.txt
