AiToEarn: Publish to 14 Platforms, Let the Agent Handle the Rest
TL;DR
- What it solves: The manual loop of logging into each platform, re-formatting the same post, scheduling separately, then spending an hour liking and replying across every account
- Why it matters: Staying active on 5+ platforms simultaneously once required a team; now it requires one API key
- Best for: Solo creators, OPCs (one-person companies), agencies managing content for multiple brands
- Main differentiator: Four agents in one - Publish, Engage, Create, and a Monetize marketplace where brands pay you CPS/CPE/CPM to post
- Try it when: You’re about to paste the same caption into platform number four and you notice the small part of your brain that used to like making content has quietly switched off
Tuesday. I had one piece of content. A short video, a caption, eight hashtags I’d already researched. The plan was to post it to TikTok, YouTube Shorts, Instagram Reels, Facebook, and Xiaohongshu.
Forty-five minutes later I was still in the browser. Each platform had a different aspect ratio recommendation. TikTok’s draft autosaved at the wrong thumbnail. Instagram wanted a separate cover image. Xiaohongshu wanted the caption reformatted with topics, not hashtags. YouTube needed a description with timestamps I didn’t have.
By the end I had posted to three of the five. The other two would wait until I could face it again.
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());What AiToEarn Is
AiToEarn is an open-source AI agent platform for content creators. It wraps four workflows - Publish, Engage, Create, and Monetize - into a single Electron desktop app (TypeScript, React) with a web dashboard and an MCP server.
One sentence: AiToEarn automates content distribution across 14+ platforms, handles engagement via LLM, generates content on demand, and connects you to a marketplace where brands pay per sale, engagement, or view.
Supported platforms: Douyin, Xiaohongshu (Rednote), Kuaishou, Bilibili, WeChat Channels, WeChat Official Accounts, TikTok, YouTube, Facebook, Instagram, Threads, X (Twitter), Pinterest, LinkedIn.
The project started as a Chinese-market tool in February 2025, opened to international platforms by September 2025, and added MCP support in March 2026 - meaning it now works as a tool inside Claude Desktop, Cursor, or any MCP-compatible assistant.
The Four Agents
Publish
The baseline. Point it at your content, pick your platforms, set a schedule, and it posts. Calendar view to plan across accounts. No reformatting per platform - the agent adapts the format.
Engage
A browser extension that runs alongside your accounts. It auto-likes, bookmarks, and follows. More importantly, it mines comments for high-conversion signals - “where’s the link?”, “how do I buy this?” - and surfaces them for fast response. For each comment, an LLM generates a context-aware reply. You can review before sending or let it queue automatically.
Create
You describe what you want. The agent calls whichever generation models you have configured - Grok, Veo, Seedance for video; Nano Banana for images - and returns a finished asset. Or batch mode: submit fifty creation prompts, the agent fills the queue in parallel. This is how matrix account operations stay manageable at scale.
Monetize
This is the part that doesn’t exist in similar tools. AiToEarn runs a content marketplace where brands post tasks (promote this product on Xiaohongshu, drive traffic to this link on Douyin) and creators pick them up for payment. Three settlement models:
| Model | Settles by |
|---|---|
| CPS (Cost Per Sale) | Transaction amount you generate |
| CPE (Cost Per Engagement) | Likes, saves, comments on your post |
| CPM (Cost Per Mille) | Views |
The creator doesn’t pitch brands. The tasks come to the dashboard. Post, get paid.
Getting Started
Five ways in - pick the one that fits:
1. Web (zero setup)
- International: aitoearn.ai
- China: aitoearn.cn
2. MCP inside Claude or Cursor
Get an API key from the Settings panel in the web dashboard, then add to claude_desktop_config.json:
{
"mcpServers": {
"aitoearn": {
"type": "http",
"url": "https://aitoearn.ai/api/unified/mcp",
"headers": {
"x-api-key": "your-api-key"
}
}
}
}
Now you can ask Claude to publish, schedule, or generate content directly from a conversation.
3. OpenClaw integration
npx -y @aitoearn/openclaw-plugin-cli
First run prompts for environment and API key. After that, earning tasks appear in the OpenClaw sidebar.
4. Docker (self-hosted)
git clone https://github.com/yikart/AiToEarn.git
cd AiToEarn
docker compose up -d
5. Build from source (Node 20.18.x required)
The project is structured under project/ with three sub-projects: aitoearn-backend, aitoearn-electron, aitoearn-web.
What Gets Harder
The Engage automation operates in grey territory on most platforms. Auto-liking and auto-following at scale violates the ToS of TikTok, Instagram, and others. The tool works - but accounts can get flagged or shadowbanned. Use it with awareness of the risk.
The Monetize marketplace is currently heavier on Chinese platforms (Douyin, Rednote, Kuaishou). International brand tasks exist but the density is lower. If you’re purely a YouTube or Instagram creator, the earning pipeline will feel thin until the international marketplace grows.
Create agent quality depends entirely on which generation models you have configured and their API costs. The tool orchestrates calls to external APIs - it doesn’t bundle inference. Your output is only as good as the model you’re calling.
The Electron app requires Node 20.18.x. Not the latest. The lock is explicit.
The Geometry of It
The insight buried in this project: content work is mostly logistics, not creativity. Reformatting, scheduling, copy-pasting captions, clicking reply seventy times - none of that is the creative part. AiToEarn automates the logistics so the creative part, however small, gets more room.
The Monetize marketplace adds a layer most solo tools ignore: connecting distribution capability directly to income. You don’t build a following and then figure out monetization separately. The tasks are already in the queue.
14,096 stars and 2,375 forks in 15 months for a TypeScript Electron app is a specific kind of signal. The market for tools that solve creator logistics is large and mostly unsolved.
→ yikart/AiToEarn · MIT · TypeScript · aitoearn.ai
Hoang Yell
A software developer and technical storyteller. I spend my time exploring the most interesting open-source repositories on GitHub and presenting them as accessible stories for everyone.