# Social media post checker: what every network will and will not publish > Markdown version of https://postlake.dev/tools/post-checker . The canonical page for humans. > PostLake is the social media API for AI agents: https://postlake.dev/llms.txt > Every number below is generated from the registry PostLake's publish path > validates against, so it cannot state a limit the API would not enforce. A free browser tool that checks a draft post against every major social network at once and names the exact reason anything would be refused. No account, no upload: the caption and any images are read locally and never leave the browser. Use it at https://postlake.dev/tools/post-checker ## What gets a post refused Four things, in roughly this order of frequency. 1. **The caption is over the limit.** The limits are far apart. Bluesky stops at 300 characters and X at 280, while LinkedIn and Instagram allow thousands. A caption written for one network routinely fails on another. 2. **Media is missing, or it is the wrong kind.** Instagram, TikTok and Pinterest cannot publish text on its own. YouTube publishes video and nothing else. LinkedIn takes images but not video from a personal profile. 3. **The image is too heavy, or outside the pixel bounds.** Weight caps range from 1MB on Bluesky to 20MB on Pinterest and TikTok, so one photo can pass on six networks and fail on the seventh. TikTok is the only network with hard pixel bounds, 1080x1920 at most and 540x960 at least, and that ceiling is smaller than most phone cameras produce. 4. **The format is wrong.** TikTok rejects PNG outright, which catches people out because a screenshot is a PNG. ## Post requirements by network | Network | Post requires | Rate limit | Threads | First comment | Delete via API | |---|---|---|---|---|---| | TikTok | an image or video | 25/day | no | no | no | | Instagram | an image or video | 100/day | no | no | no | | X | nothing, text alone is fine | no published cap | yes | yes | yes | | LinkedIn | nothing, text alone is fine | no published cap | no | yes | yes | | Facebook | nothing, text alone is fine | 25/day | no | yes | yes | | Threads | nothing, text alone is fine | 250/day | no | yes | no | | Bluesky | nothing, text alone is fine | no published cap | yes | yes | yes | | YouTube | a video | 100/day | no | yes | yes | | Pinterest | an image or video | no published cap | no | no | yes | ## Caption limits by network | Network | Caption limit | By post type | Title | |---|---|---|---| | X | 280 | same for every post type | no title field | | Bluesky | 300 | same for every post type | no title field | | Threads | 500 | same for every post type | no title field | | Pinterest | 500 | same for every post type | no title field | | TikTok | 2,200 | 2,200 with video, 4,000 with photos | 90 characters | | Instagram | 2,200 | same for every post type | no title field | | LinkedIn | 3,000 | same for every post type | no title field | | YouTube | 5,000 | same for every post type | 100 characters | | Facebook | 63,206 | same for every post type | no title field | ## Image rules by network | Network | Images per post | Formats | Max weight | Pixel bounds | |---|---|---|---|---| | TikTok | 35 | JPEG, WEBP | 20MB | 540x960 to 1080x1920 | | Instagram | 10 | JPEG | 8MB | no stated bounds | | X | 4 | JPEG, PNG, WEBP, GIF | 5MB | no stated bounds | | LinkedIn | 20 | JPEG, PNG, GIF | 8MB | no stated bounds | | Facebook | 10 | JPEG, PNG, GIF, WEBP | 10MB | no stated bounds | | Threads | 20 | JPEG, PNG | 8MB | no stated bounds | | Bluesky | 4 | JPEG, PNG, WEBP, GIF | 1MB | no stated bounds | | Pinterest | 5 | JPEG, PNG | 20MB | no stated bounds | ## Video rules by network | Network | Formats | Max weight | Max length | Video required | |---|---|---|---|---| | TikTok | MP4, QUICKTIME, WEBM | 4GB | 10 minutes | no | | Instagram | MP4, QUICKTIME | 300MB | 15 minutes | no | | X | MP4 | 512MB | 2 minutes | no | | Facebook | MP4, QUICKTIME | 1GB | 4 hours | no | | Threads | MP4, QUICKTIME | 1GB | 5 minutes | no | | Bluesky | MP4 | 50MB | 1 minutes | no | | YouTube | MP4, QUICKTIME, WEBM | 2GB | no stated cap | yes, video only | | Pinterest | MP4 | 2GB | 15 minutes | no | ## Doing this in code instead PostLake runs exactly these checks before it publishes, and before it charges anything. A post that would fail comes back as a structured error naming the network, the rule, and the fix, rather than a platform error string passed through raw. ```bash curl -X POST https://api.postlake.dev/v1/posts \ -H "Authorization: Bearer $POSTLAKE_KEY" \ -H "Content-Type: application/json" \ -d '{"text":"Hello from an agent","platforms":["bluesky","linkedin"]}' ``` Docs: https://docs.postlake.dev/quickstart --- Free tools, no signup: https://postlake.dev/tools/ ยท Plain markdown for agents: https://postlake.dev/llms.txt Canonical page: https://postlake.dev/tools/post-checker