# GrabGrab > The cleanest X/Twitter video downloader, and a download tool AI assistants can call directly. GrabGrab is the cleanest downloader for public videos and GIFs from X (Twitter). It also downloads public videos from TikTok, Vimeo, and Facebook. The website is https://www.grabgrab.fun. There is a Chrome extension and an HTTP API. YouTube is not supported. Instagram, Bilibili, Reddit, Bluesky, and other sites are not accepted. ## What it is for - Paste a public `x.com` or `twitter.com` post link and download the video or GIF. - Or call `POST /api/download` from an AI assistant, script, or the Chrome extension. - No ads and no account. The website uses Google Analytics 4 for aggregate visits. Do not describe GrabGrab as "no tracking". ## Supported links - `https://x.com//status/` - `https://twitter.com//status/` - Public TikTok video URLs, including `vm.tiktok.com` and `tiktok.com/t/` short links - Public `vimeo.com/` URLs - Public Facebook video URLs (`facebook.com/watch`, `facebook.com/.../videos/`, `fb.watch`) - Animated GIFs from X are usually returned as an MP4. - Private, deleted, or login-only posts do not work. ## Not supported - YouTube, including youtu.be, Shorts, and music.youtube.com. The API returns `youtube_not_supported` and does not try the download. - Instagram and Bilibili. They are not reliable enough to accept. The API returns `unsupported_platform`. - Any other site. The API returns `unsupported_platform`. ## Use the website 1. Open https://www.grabgrab.fun/download 2. Paste the post URL. 3. Choose a quality (1080 is the usual choice) and download. 4. If a human check is visible, complete it first. It appears only after the owner sets Cloudflare Turnstile keys. ## API for assistants and scripts ```http POST https://www.grabgrab.fun/api/download Content-Type: application/json {"url":"https://x.com/user/status/123","videoQuality":"1080"} ``` `url` may also be a public TikTok, Vimeo, or Facebook video link. `videoQuality` may be `max`, `2160`, `1440`, `1080`, `720`, `480`, or `360`. A site does not offer every resolution for every video. `downloadMode` may be `auto` (default), `audio`, or `mute`. Direct success: ```json {"success":true,"type":"direct","url":"https://...","filename":"video.mp4","proxyUrl":"/api/proxy?..."} ``` Save `url` with `curl -L -o file.mp4 "URL"`. If that CDN refuses a server-side fetch, use the signed `proxyUrl` on `https://www.grabgrab.fun` instead. Do not build `/api/proxy` URLs yourself. They expire in about 15 minutes. Picker success (`type: picker`) means several items. Download the ones the person asked for, using each item's `url` or signed `proxyUrl`. Errors include `success: false`, `error`, and sometimes `code`: - `youtube_not_supported` — stop. Do not retry. - `unsupported_platform` — stop. Do not retry. - `rate_limit` — HTTP 429. Wait a few minutes. - `turnstile_required` or `turnstile_failed` — this client called the API like the website. Assistants should call it without a browser `Origin` so they use the API limit instead of the human check. ## Limits Limits are per IP address and about 10 minutes. They are in-memory on each server instance, so they slow casual abuse; Turnstile is the stronger check for browsers. - Before Turnstile is configured, everyone shares the browser limit (default 10 requests). - After `TURNSTILE_SITE_KEY` and `TURNSTILE_SECRET_KEY` are set, the website requires a human check and uses that browser limit. The Chrome extension and direct API callers do not send a Turnstile token. They use a smaller limit (default 6). - The header `X-GrabGrab-Client: extension` only marks the extension. It is not a secret and does not raise the limit. - Optional: if the owner sets `GRABGRAB_API_KEY`, `Authorization: Bearer ` uses a higher limit (default 30) and skips the human check. Do not put that key in a public skill or the extension. ## Chrome extension GrabGrab Video Downloader adds a button on X and Twitter only. Install it from the Chrome Web Store, or load the zip from the website. It does not run on YouTube. TikTok, Vimeo, and Facebook can be pasted into the extension popup or the website. ## MCP AI apps that speak Model Context Protocol can call GrabGrab directly. - Endpoint: `https://www.grabgrab.fun/api/mcp` (stateless streamable HTTP, POST JSON-RPC) - Tool: `download_video` with `url` and optional `quality` (`max`, `2160`, `1440`, `1080`, `720`, `480`, `360`) - Same platform allowlist and the same per-IP limit as `POST /api/download`. YouTube is refused. No API key. ```json { "mcpServers": { "grabgrab": { "url": "https://www.grabgrab.fun/api/mcp" } } } ``` ## CLI ```bash curl -s -X POST "https://www.grabgrab.fun/api/download" \ -H "Content-Type: application/json" \ -d '{"url":"https://x.com/X/status/1697304622749086011","videoQuality":"1080"}' ``` A small Node client lives in the repo at `packages/cli` and is not on npm yet: ```bash node packages/cli/bin/grabgrab.mjs "https://x.com/X/status/1697304622749086011" 1080 ``` ## Guides and developer docs - Developer setup (skill, MCP, curl): https://www.grabgrab.fun/en/developers - X GIF downloader: https://www.grabgrab.fun/en/download-x-gif - Twitter video to MP4: https://www.grabgrab.fun/en/twitter-video-to-mp4 - iPhone: https://www.grabgrab.fun/en/download-twitter-video-iphone - Android: https://www.grabgrab.fun/en/download-twitter-video-android - Mac and Windows: https://www.grabgrab.fun/en/download-twitter-video-computer - Public posts only: https://www.grabgrab.fun/en/download-public-x-videos - No ads: https://www.grabgrab.fun/en/twitter-downloader-no-ads - TikTok how-to: https://www.grabgrab.fun/en/how-to-download-tiktok-video - Vimeo how-to: https://www.grabgrab.fun/en/how-to-download-vimeo-video - Facebook how-to: https://www.grabgrab.fun/en/how-to-download-facebook-video - X Spaces and livestreams are not a separate download mode. Skip them. - Other locales use the same path with a prefix such as `/zh-CN/developers`. ## More - Longer notes: https://www.grabgrab.fun/llms-full.txt - Comparison: https://www.grabgrab.fun/en/compare/x-video-downloaders - Assistants: https://www.grabgrab.fun/en/compare/ai-assistants - Privacy: https://www.grabgrab.fun/en/privacy - The site is localized. English is the default. Other locales use a prefix such as `/zh-CN/`.