<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cristian Tala</title>
    <description>The latest articles on DEV Community by Cristian Tala (@cristiantalasanchez).</description>
    <link>https://dev.to/cristiantalasanchez</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3820428%2Fa2ac251a-96f5-4902-8bba-077e3d57cd17.jpg</url>
      <title>DEV Community: Cristian Tala</title>
      <link>https://dev.to/cristiantalasanchez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cristiantalasanchez"/>
    <language>en</language>
    <item>
      <title>How I Uploaded an 18-Course Classroom to Skool With One Script (and the Bug That Almost Killed My Paywall)</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Sun, 17 May 2026 14:43:10 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/how-i-uploaded-an-18-course-classroom-to-skool-with-one-script-and-the-bug-that-almost-killed-my-2pi1</link>
      <guid>https://dev.to/cristiantalasanchez/how-i-uploaded-an-18-course-classroom-to-skool-with-one-script-and-the-bug-that-almost-killed-my-2pi1</guid>
      <description>&lt;h1&gt;
  
  
  How I Uploaded an 18-Course Classroom to Skool With One Script (and the Bug That Almost Killed My Paywall)
&lt;/h1&gt;

&lt;p&gt;When I sat down to build the curriculum for my Skool community, I had two options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A:&lt;/strong&gt; open the Skool UI, click &lt;em&gt;New Course&lt;/em&gt;, type the title, drag in a cover image, click &lt;em&gt;Add section&lt;/em&gt;, type the section title, click &lt;em&gt;Add lesson&lt;/em&gt;, type the lesson title, paste the body, fix the formatting Skool's editor mangled, save, repeat. For 18 courses with an average of 12 lessons each.&lt;/p&gt;

&lt;p&gt;That's ~220 manual operations, each in a UI that adds modal friction at every step. Realistic time: a full week of clicking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B:&lt;/strong&gt; structure the curriculum as markdown files in a local directory. Write a script that walks the directory and calls Skool's API to create the courses, folders, lessons, and bodies. Run the script. Drink coffee. Done in two hours.&lt;/p&gt;

&lt;p&gt;I went with Option B. I'd already built &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;the Skool API actor on Apify&lt;/a&gt; for other automations (member approvals, podcast publishing, comment replies), and the classroom endpoints were already there. The actor wraps Skool's reverse-engineered API with read-then-write semantics, markdown-to-Skool's-internal-format conversion, and structured error handling.&lt;/p&gt;

&lt;p&gt;What I didn't expect was the bug that nearly stripped the paywall off all 12 of my paid courses. We'll get there.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the directory looked like
&lt;/h2&gt;

&lt;p&gt;The whole curriculum lived in one folder structure on my laptop. Each course was a subdirectory; each module was a subdirectory inside that; each lesson was a markdown file. Cover images and the script to regenerate them lived next to each course.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cursos-car/
├── intro-llms-mastermap/
│   ├── M01-el-llm-no-es-oraculo/
│   │   ├── L1.1-el-llm-no-es-oraculo-ni-google.md
│   │   ├── L1.2-tokens-y-ventanas-de-contexto.md
│   │   └── L1.3-el-coste-real-de-tokens-a-dolares.md
│   ├── M02-mapa-de-modelos-2026/
│   ├── M03-framework-de-decision/
│   ├── M04-matchmaking/
│   ├── M05-tu-primer-experimento/
│   └── assets/
│       ├── cover.html         # Tailwind synthwave template
│       ├── cover.jpg          # Playwright-rendered output
│       └── render-cover.mjs   # script to regenerate the JPG
│
├── idea-validation/
│   └── [same structure, 15 lessons across 5 modules]
│
├── podcasts-car/
│   └── [12 lessons in one folder, no modules — flat archive]
│
└── [15 more courses]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each &lt;code&gt;L*.md&lt;/code&gt; file is a self-contained lesson. First line is &lt;code&gt;# Title&lt;/code&gt;. Body is normal markdown with the occasional callout block.&lt;/p&gt;

&lt;p&gt;The build pipeline reads this directory, creates one course on Skool per top-level folder, one Skool &lt;em&gt;section&lt;/em&gt; (folder) per &lt;code&gt;M*-*&lt;/code&gt; subdirectory, and one Skool &lt;em&gt;lesson&lt;/em&gt; per &lt;code&gt;L*.md&lt;/code&gt; file. The body of the lesson is the markdown content converted to Skool's internal TipTap JSON format.&lt;/p&gt;

&lt;p&gt;The whole pipeline is straightforward to describe. It hides four traps. Let me walk you through them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trap 1: Skool prefixes folders with "Section N:" — don't do it manually
&lt;/h2&gt;

&lt;p&gt;My first pass at the directory naming put the module number in the folder name itself: &lt;code&gt;M01-intro&lt;/code&gt;, &lt;code&gt;M02-mapa-modelos&lt;/code&gt;, etc. The script passed those titles straight through to &lt;code&gt;classroom:createFolder&lt;/code&gt; on Skool.&lt;/p&gt;

&lt;p&gt;Result in the UI: every folder displayed as &lt;strong&gt;"Section 1: M01 — Intro"&lt;/strong&gt;, &lt;strong&gt;"Section 2: M02 — Mapa de Modelos"&lt;/strong&gt;, etc. Double-numbered. Awful.&lt;/p&gt;

&lt;p&gt;Skool prefixes every section in a course with "Section N:" automatically based on its position. If you also number manually in the title, you get the duplication.&lt;/p&gt;

&lt;p&gt;Fix: drop the &lt;code&gt;M01-&lt;/code&gt;, &lt;code&gt;M02-&lt;/code&gt; prefix from the folder titles you pass to the API. Keep the prefix in your local directory names if you want them ordered on disk — just don't pass them to Skool.&lt;/p&gt;

&lt;p&gt;Now my titles are just &lt;code&gt;🧱 El LLM no es un Oráculo&lt;/code&gt;, &lt;code&gt;🗺️ Mapa de Modelos 2026&lt;/code&gt;, etc. Skool renders them as &lt;code&gt;Section 1: 🧱 El LLM no es un Oráculo&lt;/code&gt;, which is what I wanted.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trap 2: &lt;code&gt;classroom:updateCourse&lt;/code&gt; silently resets &lt;code&gt;privacy&lt;/code&gt; to 0
&lt;/h2&gt;

&lt;p&gt;This is the one that almost cost me real money.&lt;/p&gt;

&lt;p&gt;A few weeks into running the pipeline, I needed to update the description on a few courses. Trivial — &lt;code&gt;classroom:updateCourse&lt;/code&gt; with the new &lt;code&gt;desc&lt;/code&gt; field. Worked fine.&lt;/p&gt;

&lt;p&gt;Until I checked the courses in the Skool UI and noticed the lock icons had disappeared. Twelve paid courses were now showing as &lt;strong&gt;Open&lt;/strong&gt; (free) to all members. The Premium tier I'd set was wiped. &lt;code&gt;amount: 147&lt;/code&gt; was now &lt;code&gt;amount: 0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;What happened: Skool's &lt;code&gt;PUT /courses/{courseId}&lt;/code&gt; endpoint is a &lt;em&gt;replace&lt;/em&gt;, not a &lt;em&gt;merge&lt;/em&gt;. If you omit a field in the body, Skool doesn't preserve it from the existing record — it resets it to the default. &lt;code&gt;privacy&lt;/code&gt; defaults to &lt;code&gt;0&lt;/code&gt; (Open). &lt;code&gt;amount&lt;/code&gt; defaults to &lt;code&gt;0&lt;/code&gt;. &lt;code&gt;minTier&lt;/code&gt; happens to be preserved (because it's an integer with no default that fits "I omitted this"), but &lt;code&gt;privacy&lt;/code&gt; and &lt;code&gt;amount&lt;/code&gt; are not.&lt;/p&gt;

&lt;p&gt;The actor now does &lt;code&gt;updateCourse&lt;/code&gt; as &lt;strong&gt;read-then-write internally&lt;/strong&gt;. It fetches the current course state, merges your input on top, sends the full body. Cost: +1 GET (~200ms per update). Worth every millisecond.&lt;/p&gt;

&lt;p&gt;But the day I figured this out, I had to fix twelve courses by hand in the UI before any paying member noticed they had free access to everything.&lt;/p&gt;

&lt;p&gt;If you build any automation against Skool's classroom endpoints, &lt;strong&gt;never&lt;/strong&gt; send a partial PUT. Always read the current state first, merge, and write the full body. The actor handles this for &lt;code&gt;updateCourse&lt;/code&gt;. If you call the Skool API directly: read-then-write everywhere, no exceptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trap 3: Markdown converter quirks
&lt;/h2&gt;

&lt;p&gt;The actor accepts markdown for lesson bodies and converts it to Skool's internal &lt;code&gt;[v2]&amp;lt;JSON_array&amp;gt;&lt;/code&gt; TipTap format. The conversion is mostly faithful, but a few things bit me when my source markdown wasn't strict.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Brackets without URLs become plain text.&lt;/strong&gt; A line like &lt;code&gt;[Read more] - in this guide&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; valid markdown link syntax (no parentheses with URL). Most renderers tolerate it. Skool's converter respects the spec — it stays as literal text with brackets visible. Audit your "For more reading" sections before publish. This bit me three times in lessons generated by an AI agent that wasn't strict about link syntax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;### [Sección 1] Title&lt;/code&gt; is literal text, not auto-numbered.&lt;/strong&gt; Two of my lessons had &lt;code&gt;### [Sección 1] The economy...&lt;/code&gt; and &lt;code&gt;### [Sección 2] When to use them...&lt;/code&gt; literally in the markdown. False alarm: I thought the converter was adding the "Sección 1" prefix. It wasn't — the source content had it. Skool renders it verbatim. Strip those patterns from your source before converting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Headings inside blockquotes get flattened.&lt;/strong&gt; Skool only renders the blockquote's left border on &lt;code&gt;paragraph&lt;/code&gt; children. A real &lt;code&gt;bulletList&lt;/code&gt; inside a &lt;code&gt;blockquote&lt;/code&gt; visually escapes the callout. The converter handles this by flattening nested lists inside blockquotes to paragraphs with &lt;code&gt;•&lt;/code&gt; prefixes. Cosmetic, but a fact to know if your markdown style relies on nested structure inside callouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tables with many columns degrade.&lt;/strong&gt; Tables that fit (≤5 cols × ≤10 rows × ≤30 chars/cell) render as monospace code blocks (preserves alignment). Larger tables degrade to bulleted lists with bold-key prefixes. Acceptable, but plan your tables accordingly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trap 4: Re-running creates a NEW course (course-create is not idempotent)
&lt;/h2&gt;

&lt;p&gt;The script that creates a course top-to-bottom is &lt;em&gt;not&lt;/em&gt; idempotent. Re-running it creates an entirely new course with the same name, not an update.&lt;/p&gt;

&lt;p&gt;Skool has no "upsert course by name." There's no unique constraint on course title within a community. If your script fails halfway and you re-run it, you now have two half-built courses with the same name.&lt;/p&gt;

&lt;p&gt;How I handle this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For initial course creation:&lt;/strong&gt; dry-run against a test Skool community first. I use &lt;code&gt;nyx-trial-run-8420&lt;/code&gt; for this. Only push to production (CAR) once the test passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For incremental updates&lt;/strong&gt; (add a lesson, fix a typo): use a different code path that takes the existing &lt;code&gt;courseId&lt;/code&gt; and &lt;code&gt;pageId&lt;/code&gt; as inputs. No course creation involved. The IDs are checked into the script as constants — yes, hardcoded, on purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For full re-publishes&lt;/strong&gt; (rare): delete the old course manually in the UI first, then re-run the script.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern I land on for any Skool automation now: the create-course path and the update-course path are different scripts, with different inputs, and only the create-course one ever runs against a test community first.&lt;/p&gt;




&lt;h2&gt;
  
  
  The actor calls (the actual flow)
&lt;/h2&gt;

&lt;p&gt;Skipping the markdown parsing, the cover image render, and the directory walk — the Skool side of the pipeline is four actor calls per course.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Upload the cover image
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"files:uploadImage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from auth:login&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"file"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;base64-encoded JPG of the cover&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns &lt;code&gt;coverImage&lt;/code&gt; (the S3 reference) + &lt;code&gt;coverImageFile&lt;/code&gt; (a UUID Skool stores separately). You need both for the next call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create the course
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:createCourse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;...&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"🧠 Intro a LLMs · Decide cuál usar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"desc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aprende a elegir el modelo correcto para cada caso de uso."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"coverImage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from step 1&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"coverImageFile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from step 1&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"privacy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"minTier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns &lt;code&gt;courseId&lt;/code&gt;. Course is now visible (but empty) in the classroom.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: For each module folder, create a section
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:createFolder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;...&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parentCourseId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from step 2&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"🧱 El LLM no es un Oráculo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns the section's &lt;code&gt;folderId&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: For each lesson markdown, create the page + set the body
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:createPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;...&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"courseId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from step 2&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parentId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;folderId from step 3&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.1 El LLM no es un Oráculo ni un Google"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns &lt;code&gt;pageId&lt;/code&gt;. Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:setBody"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;...&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pageId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from above&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.1 El LLM no es un Oráculo ni un Google"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bodyMarkdown"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;the contents of L1.1-el-llm-no-es-oraculo-ni-google.md&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lesson is live in the classroom.&lt;/p&gt;

&lt;h3&gt;
  
  
  One detail: delete the placeholder page
&lt;/h3&gt;

&lt;p&gt;Skool auto-creates an empty &lt;em&gt;New page&lt;/em&gt; in every new course. The script deletes it after step 4 so the user doesn't see an empty placeholder. The actor exposes this via &lt;code&gt;classroom:deletePage&lt;/code&gt; if you need it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this saved me
&lt;/h2&gt;

&lt;p&gt;The math on a single course:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Manual (UI clicks)&lt;/th&gt;
&lt;th&gt;Automated (actor calls)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create course + cover&lt;/td&gt;
&lt;td&gt;~3 minutes&lt;/td&gt;
&lt;td&gt;2 calls (~2s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create 5 folders&lt;/td&gt;
&lt;td&gt;~5 minutes (1/folder, modal friction)&lt;/td&gt;
&lt;td&gt;5 calls (~3s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create 15 lessons + bodies&lt;/td&gt;
&lt;td&gt;~30-45 minutes (1.5-3 min/lesson)&lt;/td&gt;
&lt;td&gt;30 calls (~30s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total per course&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;38-53 minutes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~35 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Across 18 courses: roughly &lt;strong&gt;12 hours of clicking&lt;/strong&gt; vs &lt;strong&gt;~10 minutes of script execution&lt;/strong&gt; + the time it took to write the script (one afternoon, reusable across all courses).&lt;/p&gt;

&lt;p&gt;The first course paid back the entire build investment. The next 17 are pure margin.&lt;/p&gt;

&lt;p&gt;Costs on the actor side: ~$0.20 per course at current pricing ($0.005 per result for the 1 result returned by each call, $0.01 per write for ~35 writes per course). Eighteen courses cost less than $4 to publish. Less than the hourly value of fifteen minutes of clicking.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to copy this for your community
&lt;/h2&gt;

&lt;p&gt;If you're sitting on a directory of course content (markdown, Google Docs, Notion exports) and looking at the manual upload path with dread, the pattern is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Normalize your source content&lt;/strong&gt; to markdown files in a consistent directory structure. One &lt;code&gt;.md&lt;/code&gt; file per lesson, first line is the title, content is everything below.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render or upload your course covers&lt;/strong&gt; once. Each course needs a cover; you can either prerender all of them or generate them from a template (I use a Tailwind HTML template + Playwright screenshot).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate once&lt;/strong&gt; with &lt;code&gt;auth:login&lt;/code&gt;. The actor returns cookies valid for ~3.5 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walk your directory&lt;/strong&gt;, calling &lt;code&gt;classroom:createCourse&lt;/code&gt; → &lt;code&gt;classroom:createFolder&lt;/code&gt; per module → &lt;code&gt;classroom:createPage&lt;/code&gt; + &lt;code&gt;classroom:setBody&lt;/code&gt; per lesson.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dry-run against a test community first.&lt;/strong&gt; Spin up a free Skool community for testing if you don't have one. Skool's create-course is not idempotent — get a clean publish out of the test community before pointing the script at production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save the resulting course IDs and page IDs&lt;/strong&gt; if you'll ever need to update individual lessons. Hardcode them in your incremental-update script.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole thing is one Apify actor with one consistent input shape. In n8n / Make.com / Zapier, each call is a single node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Skool API — Posts, Members &amp;amp; Classroom on Apify&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What this unlocks
&lt;/h2&gt;

&lt;p&gt;The directory-as-source-of-truth pattern is what makes the rest of my Skool operations sustainable. The curriculum lives in version-controlled markdown. Editing a lesson is a &lt;code&gt;git commit&lt;/code&gt; away from being live. New courses are a copy of an existing directory + &lt;code&gt;node scripts/build-course.mjs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The Skool UI is now the &lt;em&gt;viewer&lt;/em&gt; for community members. The &lt;em&gt;editor&lt;/em&gt; is my laptop.&lt;/p&gt;

&lt;p&gt;If you want the broader picture of what the actor can do beyond classroom — posts, members, comments, files, events — I wrote the pillar guide here: &lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/the-complete-skool-api-guide-2026-posts-members-classroom-and-100-automations-3a73"&gt;The Complete Skool API Guide (2026)&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And if you want the other case study from this series — how I publish podcast episodes to the classroom 100% automatically with the same actor — that's here: &lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/how-i-publish-podcast-episodes-to-a-skool-classroom-100-automatically-37a4"&gt;How I Publish Podcast Episodes to Skool 100% Automatically&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Currently testing a similar pipeline for the next 18 courses. If you've automated something on Skool that needs an endpoint not in the actor today, open an issue on the actor's Apify page. That's how the roadmap moves.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>skool</category>
      <category>automation</category>
      <category>classroom</category>
      <category>markdown</category>
    </item>
    <item>
      <title>How I Publish Podcast Episodes to a Skool Classroom 100% Automatically</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Sun, 17 May 2026 14:40:24 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/how-i-publish-podcast-episodes-to-a-skool-classroom-100-automatically-37a4</link>
      <guid>https://dev.to/cristiantalasanchez/how-i-publish-podcast-episodes-to-a-skool-classroom-100-automatically-37a4</guid>
      <description>&lt;h1&gt;
  
  
  How I Publish Podcast Episodes to a Skool Classroom 100% Automatically
&lt;/h1&gt;

&lt;p&gt;We record an episode of &lt;em&gt;Es La Hora De Aprender&lt;/em&gt; every week. Three hosts, hour and change of conversation about AI, startups, and the LATAM ecosystem. By the time we finish recording, the next 60 minutes of work are mechanical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transcribe.&lt;/li&gt;
&lt;li&gt;Cut a thumbnail.&lt;/li&gt;
&lt;li&gt;Publish to the podcast website.&lt;/li&gt;
&lt;li&gt;Notify the email list.&lt;/li&gt;
&lt;li&gt;Cross-post to two WordPress sites for SEO.&lt;/li&gt;
&lt;li&gt;Add the episode as a lesson in the Skool community classroom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do exactly zero of those steps by hand. The whole chain runs from one shell command. The Skool step — adding the new episode as a lesson in the &lt;em&gt;Podcasts CAR&lt;/em&gt; course inside my community — is what I want to walk through here.&lt;/p&gt;

&lt;p&gt;This is one of the few automations that &lt;em&gt;requires&lt;/em&gt; the Skool API. Skool's UI doesn't expose any bulk-add for classroom lessons. If you want a new episode to appear in your classroom every week, you either click through eight modals manually, or you call the API.&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;the Skool API actor on Apify&lt;/a&gt; for this. The actor exposes the classroom endpoints I reverse-engineered. Here's what the pipeline does end-to-end, and the gotchas I hit building it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the automation produces
&lt;/h2&gt;

&lt;p&gt;The end state, for context: a course inside my community called &lt;em&gt;Podcasts CAR&lt;/em&gt;, free for all members, with one folder per show and one lesson per episode. Episodes are ordered newest-first.&lt;/p&gt;

&lt;p&gt;Each lesson is a single page with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 1-2 line hook for the episode&lt;/li&gt;
&lt;li&gt;The YouTube thumbnail (full size, clickable to YouTube)&lt;/li&gt;
&lt;li&gt;Direct links to YouTube, Spotify, Apple Podcasts&lt;/li&gt;
&lt;li&gt;Two short paragraphs on what's covered&lt;/li&gt;
&lt;li&gt;Five concrete takeaways&lt;/li&gt;
&lt;li&gt;An open question for the community&lt;/li&gt;
&lt;li&gt;Footer with hosts + episode date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson is &lt;em&gt;not&lt;/em&gt; the transcript. The transcript lives on &lt;code&gt;eslahoradeaprender.com&lt;/code&gt; for SEO. The classroom lesson is a curated synthesis — the version a community member skims to decide whether the episode is worth their hour.&lt;/p&gt;

&lt;p&gt;That distinction matters. If you dump the transcript into the classroom, you cannibalize your own SEO and the lesson becomes too long to skim. Synthesis in the classroom, full transcript on the podcast site.&lt;/p&gt;

&lt;p&gt;12 episodes published this way so far. Zero manual clicks per episode.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pipeline, end to end
&lt;/h2&gt;

&lt;p&gt;The chain is six steps. Skool is step 5.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Episode published&lt;/strong&gt; on the podcast website (Astro static site)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build check&lt;/strong&gt; + git push + IndexNow notification to Bing/Yandex&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syndicated&lt;/strong&gt; to &lt;code&gt;cristiantala.com&lt;/code&gt; (WordPress, as a &lt;code&gt;podcast_episodes&lt;/code&gt; custom post type) and &lt;code&gt;ecosistemastartup.com&lt;/code&gt; (WordPress, as a regular post)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; sitemap resubmit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skool lesson created&lt;/strong&gt; in the &lt;em&gt;Podcasts CAR&lt;/em&gt; course → this post is about this step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email notification&lt;/strong&gt; to the newsletter list&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1-4 and 6 are out of scope for this post. Step 5 is what the Skool API handles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Skool needed the API
&lt;/h2&gt;

&lt;p&gt;When I designed the &lt;em&gt;Podcasts CAR&lt;/em&gt; course, I had two options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A:&lt;/strong&gt; publish each episode as a separate Skool post in the community feed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B:&lt;/strong&gt; publish each episode as a lesson inside a course in the classroom.&lt;/p&gt;

&lt;p&gt;Option A is what most Skool community owners do. It's the path of least resistance because the UI makes it easy. It also means the episode scrolls out of the feed in two days and is never findable again.&lt;/p&gt;

&lt;p&gt;Option B (classroom) gives you a permanent, indexed, browsable archive. New members can binge old episodes the way they binge any other course. Episodes don't compete with daily feed activity. And the format scales: I added a second folder for the &lt;em&gt;Ecosistema Startup&lt;/em&gt; podcast without rebuilding anything.&lt;/p&gt;

&lt;p&gt;But Option B has zero UI affordance for "add a new lesson to an existing course from outside Skool." You have to log in, navigate to the course, click "Add lesson", fill in the modal, drag the lesson into the right position, click save, repeat for the body content, set the cover, save again. Every. Single. Week.&lt;/p&gt;

&lt;p&gt;The API lets me do it in two function calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  The actor calls (the actual code)
&lt;/h2&gt;

&lt;p&gt;Here's the slimmed-down version of what the pipeline does after the episode is published on the podcast site. Skipping error handling and the YouTube ID extraction so the flow is clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Build the lesson body in markdown
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# EP12: Ley IA Chile · agentes autónomos · default a IA&lt;/span&gt;

Mediados de mayo. Cristian, Diego y Rodrigo discuten el borrador
de la ley IA chilena, qué significa "agente autónomo" en la
práctica, y por qué cada vez más gente vuelve al default de
preguntarle a la IA antes que a Google.

&lt;span class="gu"&gt;## Ver o escuchar el episodio&lt;/span&gt;

&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;EP12 en YouTube&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://img.youtube.com/vi/VIDEO_ID/maxresdefault.jpg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

▶️ &lt;span class="gs"&gt;**YouTube**&lt;/span&gt; — &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;youtube.com/watch?v=VIDEO_ID&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://youtube.com/watch?v=VIDEO_ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
🎧 &lt;span class="gs"&gt;**Spotify**&lt;/span&gt; — &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;open.spotify.com/episode/...&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://open.spotify.com/episode/...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
🍎 &lt;span class="gs"&gt;**Apple Podcasts**&lt;/span&gt; — &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;podcasts.apple.com/...&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://podcasts.apple.com/...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="gu"&gt;## Lo que se cubre&lt;/span&gt;

[Two paragraphs of synthesis — what the episode is about, written
to be skimmable in 45 seconds]

&lt;span class="gu"&gt;## 5 takeaways concretos&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; ...
&lt;span class="p"&gt;2.&lt;/span&gt; ...
&lt;span class="p"&gt;3.&lt;/span&gt; ...
&lt;span class="p"&gt;4.&lt;/span&gt; ...
&lt;span class="p"&gt;5.&lt;/span&gt; ...

&lt;span class="gu"&gt;## Pregunta abierta para la comunidad&lt;/span&gt;

[A real open question that invites a comment in the community,
not a rhetorical one]
&lt;span class="p"&gt;
---&lt;/span&gt;
&lt;span class="ge"&gt;*Cristian Tala · Diego Arias · Rodrigo Rojo · 15-may-2026*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is just a string in my pipeline. Skool eats markdown via the actor; I don't have to learn their internal TipTap JSON format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Authenticate (once per 3.5 days)
&lt;/h3&gt;

&lt;p&gt;The actor's &lt;code&gt;auth:login&lt;/code&gt; action returns a cookie string that's valid for ~3.5 days. I cache it in my pipeline's KV store and only re-login when it expires.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth:login"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin@cristiantala.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth_token=...; client_id=...; aws-waf-token=..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expiresAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-20T22:51:34.636Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"buildId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1778782667413"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Create the lesson page
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:createPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from auth:login&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"courseId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"76b80da4e0ef48cb9da7b7f23229f44a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parentId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;folder-id-for-ELHDA&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EP12: Ley IA Chile · agentes autónomos · default a IA"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response includes a &lt;code&gt;pageId&lt;/code&gt;. We use that next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Set the lesson body
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"classroom:setBody"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cagala-aprende-repite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from auth:login&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pageId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from step 3&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EP12: Ley IA Chile · agentes autónomos · default a IA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bodyMarkdown"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;the markdown from step 1&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The episode is now a lesson in the classroom, ordered at the top of the &lt;em&gt;ELHDA&lt;/em&gt; folder.&lt;/p&gt;

&lt;p&gt;End-to-end from "episode published on podcast site" to "lesson live in Skool classroom" — about 30 seconds, mostly waiting on Skool's API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three gotchas that cost me time
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. YouTube embeds: thumbnail-only, no native player
&lt;/h3&gt;

&lt;p&gt;I wanted an embedded YouTube player in the lesson. Skool's REST API accepts a &lt;code&gt;videoId&lt;/code&gt; field in &lt;code&gt;setBody&lt;/code&gt; — but it requires Skool's &lt;em&gt;internal&lt;/em&gt; video ID, not the YouTube ID.&lt;/p&gt;

&lt;p&gt;When you paste a YouTube URL into Skool's UI editor, Skool's frontend hits some endpoint, resolves the YouTube URL into an internal video ID, and stores that. There's no documented REST endpoint to do this resolution programmatically.&lt;/p&gt;

&lt;p&gt;For now I render the YouTube thumbnail as a markdown image and put the YouTube link immediately below. Visually it looks like a clickable embed. Functionally, the click goes to YouTube instead of playing inline. Acceptable trade-off.&lt;/p&gt;

&lt;p&gt;Capturing the YouTube → Skool video ID endpoint with Playwright is on the roadmap. If you'd find it useful, open an issue on the actor — that's how I prioritize.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. YouTube ID regex: don't use &lt;code&gt;\w+&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;My first version of the pipeline extracted YouTube IDs from URLs with a regex that used &lt;code&gt;\w+&lt;/code&gt;. That matches letters, digits, and underscores — but not hyphens.&lt;/p&gt;

&lt;p&gt;YouTube IDs are exactly 11 characters from &lt;code&gt;[A-Za-z0-9_-]&lt;/code&gt;. Two of my episodes had IDs starting with or containing hyphens. The regex captured &lt;code&gt;43nvC&lt;/code&gt; instead of &lt;code&gt;43nvC-1fxKY&lt;/code&gt; and &lt;code&gt;Ph&lt;/code&gt; instead of &lt;code&gt;Ph-7H1atqoA&lt;/code&gt;. Episode 7's ID started with &lt;code&gt;-&lt;/code&gt; and the regex didn't match at all.&lt;/p&gt;

&lt;p&gt;Fix: use &lt;code&gt;[A-Za-z0-9_-]{11}&lt;/code&gt; for YouTube IDs. Always specify the character class and the fixed length.&lt;/p&gt;

&lt;p&gt;Generic-feeling gotcha, but it cost me an afternoon. Sharing in case it saves you one.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Re-running the pipeline creates a NEW course
&lt;/h3&gt;

&lt;p&gt;The script I use for one-shot course creation (initial publish of the &lt;em&gt;Podcasts CAR&lt;/em&gt; course, all 12 episodes at once) is &lt;em&gt;not&lt;/em&gt; idempotent. Re-running it creates an entirely new course, not an update. Skool has no "upsert course by name."&lt;/p&gt;

&lt;p&gt;For incremental episode additions, I use a different code path that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Looks up the existing &lt;code&gt;courseId&lt;/code&gt; (hardcoded in my pipeline)&lt;/li&gt;
&lt;li&gt;Looks up the existing &lt;code&gt;folderId&lt;/code&gt; (also hardcoded)&lt;/li&gt;
&lt;li&gt;Creates just the new page (&lt;code&gt;createPage&lt;/code&gt;) and sets the body (&lt;code&gt;setBody&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you build this kind of automation: keep the course ID and folder IDs as constants in your pipeline. Don't recompute them by name lookup unless you want a course nuke on a typo.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this saves me per week
&lt;/h2&gt;

&lt;p&gt;The manual version of this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to Skool&lt;/li&gt;
&lt;li&gt;Navigate to &lt;em&gt;Podcasts CAR&lt;/em&gt; course&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Add lesson&lt;/em&gt; on the ELHDA folder&lt;/li&gt;
&lt;li&gt;Type the title&lt;/li&gt;
&lt;li&gt;Drag the new lesson to position 1 (newest first)&lt;/li&gt;
&lt;li&gt;Click into the lesson&lt;/li&gt;
&lt;li&gt;Type or paste the body content&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;Confirm cover renders, save again if it doesn't&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Realistic time: 8-12 minutes per episode if you're focused, more if you context-switch in the middle. Weekly podcast = 35-50 minutes/month, every month, forever.&lt;/p&gt;

&lt;p&gt;The automated version: zero seconds of human time. The shell command that publishes the episode to the website fires the whole chain.&lt;/p&gt;

&lt;p&gt;Multiply this across all the other things I automate against Skool (member approvals, daily engagement bot, course publishing) and the actor pays for itself the first week.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to copy this
&lt;/h2&gt;

&lt;p&gt;If you have a Skool community and a podcast (or any recurring content), the pattern transfers directly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create one course&lt;/strong&gt; in your Skool classroom to hold the archive (do this manually, once)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note down the &lt;code&gt;courseId&lt;/code&gt; and &lt;code&gt;folderId&lt;/code&gt;&lt;/strong&gt; — you'll hardcode these in your pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate once&lt;/strong&gt; with &lt;code&gt;auth:login&lt;/code&gt;, cache the cookies for 3.5 days&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For each new content item&lt;/strong&gt;, call &lt;code&gt;classroom:createPage&lt;/code&gt; + &lt;code&gt;classroom:setBody&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole automation is two actor calls per episode (plus the auth refresh every few days). In n8n, that's two HTTP request nodes. In Make.com, two Apify modules. In Zapier, two steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Skool API — Posts, Members &amp;amp; Classroom on Apify&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pricing: pay-per-event. Two writes per episode + auth occasionally = a few cents per week per podcast.&lt;/p&gt;

&lt;p&gt;If you want the full pillar on what the actor can do beyond classroom (posts, members, comments, files): I wrote that here — &lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/the-complete-skool-api-guide-2026-posts-members-classroom-and-100-automations-3a73"&gt;The Complete Skool API Guide (2026)&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And if you want the next case study — uploading an 18-course classroom from markdown in a single script — that's here: &lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/how-i-uploaded-an-18-course-classroom-to-skool-with-one-script-and-the-bug-that-almost-killed-my-2pi1"&gt;How I Uploaded an 18-Course Classroom to Skool With One Script&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found a gotcha I didn't cover, or you've automated something on Skool that requires an endpoint the actor doesn't expose? Open an issue on the actor's Apify page. That's how the roadmap gets built.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>skool</category>
      <category>automation</category>
      <category>podcast</category>
      <category>apify</category>
    </item>
    <item>
      <title>The Complete Skool API Guide (2026): Posts, Members, Classroom, and 100% Automations</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Sun, 17 May 2026 14:40:21 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/the-complete-skool-api-guide-2026-posts-members-classroom-and-100-automations-3a73</link>
      <guid>https://dev.to/cristiantalasanchez/the-complete-skool-api-guide-2026-posts-members-classroom-and-100-automations-3a73</guid>
      <description>&lt;h1&gt;
  
  
  The Complete Skool API Guide (2026): Posts, Members, Classroom, and 100% Automations
&lt;/h1&gt;

&lt;p&gt;Skool doesn't have a public API. They've said this publicly, repeatedly, for years.&lt;/p&gt;

&lt;p&gt;That's a problem if you run a community on Skool and want to do anything beyond clicking buttons in their UI: bulk-approve members, auto-reply to comments, publish a course from markdown, sync members to your CRM, post the latest podcast episode to your classroom without opening a browser.&lt;/p&gt;

&lt;p&gt;I run a Skool community called Cágala, Aprende, Repite (CAR). 484 members, paid tiers, daily activity. There's no way I'm clicking buttons for all of that. So I reverse-engineered the API. Then I built it into an Apify actor so you don't have to.&lt;/p&gt;

&lt;p&gt;This guide is everything I learned. Real endpoints, real auth flow, real gotchas — including the ones that cost me a week of debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One thing upfront:&lt;/strong&gt; every code snippet here shows you how to call the actor on Apify, not the actor's source code. The implementation lives in a private repo for reasons I'll explain at the end. You can run the actor today without touching the source.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Skool actually works under the hood
&lt;/h2&gt;

&lt;p&gt;Skool runs on two backends, and most third-party tools get this wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reads&lt;/strong&gt; go through Next.js SSR endpoints. When you load a community page in your browser, the data comes from &lt;code&gt;https://www.skool.com/_next/data/{buildId}/{slug}.json&lt;/code&gt;. Fast, no auth challenge, perfect for scraping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writes&lt;/strong&gt; go through a separate REST API at &lt;code&gt;https://api2.skool.com&lt;/code&gt;. Different auth surface, different headers, different error patterns.&lt;/p&gt;

&lt;p&gt;This split has two consequences you'll hit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;buildId&lt;/code&gt; rotates roughly weekly&lt;/strong&gt; when Skool deploys a new version of their frontend. If your scraper caches a buildId and that build expires, every read returns 404 with no clear hint that you need to refresh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication tokens expire on different clocks.&lt;/strong&gt; The session JWT lasts months, but the Cloudflare WAF token (&lt;code&gt;aws-waf-token&lt;/code&gt;) expires after about 3.5 days. After that, all writes return 403 until you re-authenticate through a fresh browser session.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A naive scraper breaks every 3-7 days for one of these two reasons. The actor handles both automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authentication: cookies vs Playwright
&lt;/h2&gt;

&lt;p&gt;Skool's login flow is protected by Cloudflare WAF. You can't just &lt;code&gt;POST /login&lt;/code&gt; with email + password and get a token. You need a real browser to clear the challenge, which is why the actor uses Playwright for the initial login.&lt;/p&gt;

&lt;p&gt;The full cookie set Skool requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;auth_token&lt;/code&gt; — JWT, long-lived (months)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client_id&lt;/code&gt; — 32-char hex, stable per session&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aws-waf-token&lt;/code&gt; — Cloudflare WAF cookie, expires ~3.5 days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three are required. Drop any one and writes fail with 403.&lt;/p&gt;

&lt;p&gt;The actor exposes an &lt;code&gt;auth:login&lt;/code&gt; action that runs the Playwright flow once and returns a cookie string you can reuse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth:login"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"you@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupSlug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-skool-group"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cookies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auth_token=...; client_id=...; aws-waf-token=..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expiresAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-20T22:51:34.636Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expiresInDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"buildId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1778782667413"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Subsequent calls pass the &lt;code&gt;cookies&lt;/code&gt; string and skip the Playwright bootstrap. A login takes about 10 seconds. A cookie-authenticated call takes about 2. If you're running a workflow that does many operations, this matters.&lt;/p&gt;

&lt;p&gt;When the WAF cookie expires (every 3.5 days), the actor returns a structured error with &lt;code&gt;errorCode: AUTH_REQUIRED&lt;/code&gt; and you re-run &lt;code&gt;auth:login&lt;/code&gt;. Schedule this in your automation and you never think about auth again.&lt;/p&gt;




&lt;h2&gt;
  
  
  The endpoint catalog (what you can actually do)
&lt;/h2&gt;

&lt;p&gt;The actor covers every Skool resource I've reverse-engineered. Each one is a separate &lt;code&gt;action&lt;/code&gt; in the actor input.&lt;/p&gt;

&lt;h3&gt;
  
  
  Posts
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List posts in a community (with pagination, sort, category filter)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch a single post by ID, with author, likes, label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:create&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a top-level post. &lt;strong&gt;Requires &lt;code&gt;labelId&lt;/code&gt;&lt;/strong&gt; if the community has categories (it does)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Edit title/content/label of an existing post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete a post (admin only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:createComment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reply to a post or to another comment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:getComments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Up to ~30 top-level comments per call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posts:getCommentsFull&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Playwright-based scrape that returns ALL comments in a thread (slower, charged at scrape rate)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Posts and comments are the same object in Skool's data model. A comment is just a post with &lt;code&gt;rootId&lt;/code&gt; (the original post) and &lt;code&gt;parentId&lt;/code&gt; (its direct parent). This matters for one specific case I'll get to in a minute.&lt;/p&gt;

&lt;h3&gt;
  
  
  Members
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List members of a group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:pending&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List waitlist (people who applied but not yet approved)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:approve&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Approve a pending member&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:reject&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reject a pending member&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:ban&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ban an existing member&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;members:batchApprove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Approve multiple at once&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Classroom (courses, folders, lessons)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:createCourse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a top-level course with cover image, privacy, tier gate, drip schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:createFolder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add a section (folder) inside a course&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:createPage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add a lesson page inside a folder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:setBody&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set the lesson body. Accepts markdown and converts to Skool's TipTap JSON format internally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:updateCourse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update course metadata. &lt;strong&gt;Read-then-write internally&lt;/strong&gt; because of a subtle Skool quirk (see "Gotchas" below)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;classroom:updateResources&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Attach uploaded files to a lesson's Resources section&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Files
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;files:uploadImage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Upload a cover image. Returns the S3 reference Skool expects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;files:uploadFile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Upload any file (PDF, ZIP, etc.) for use as a lesson resource. Sets &lt;code&gt;privacy:1&lt;/code&gt; automatically — Skool silently rejects files without it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Groups
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;groups:get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fetch a group's full metadata: members count, categories (&lt;code&gt;labels&lt;/code&gt;), tiers, settings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Events
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;events:list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List events with real next-occurrence times + timezone + occurrenceId for RSVP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  System
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;system:health&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cheap, no-auth health check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;system:debug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns Apify egress IP, raw Skool homepage status, extracted buildId, and a full &lt;code&gt;posts:list&lt;/code&gt; replication — invaluable when something breaks intermittently&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Common gotchas (the stuff that bit me, so it doesn't bite you)
&lt;/h2&gt;

&lt;p&gt;These aren't theoretical. Each one cost me hours.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;posts:create&lt;/code&gt; requires &lt;code&gt;labelId&lt;/code&gt; if your community has categories
&lt;/h3&gt;

&lt;p&gt;If your Skool community has post categories (almost all do), &lt;code&gt;posts:create&lt;/code&gt; without &lt;code&gt;labelId&lt;/code&gt; returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;HTTP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"object_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"post"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"metadata.labels"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"You must select a category"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The actor surfaces this as &lt;code&gt;errorCode: MISSING_CATEGORY&lt;/code&gt; with a hint. Fetch the available labels with &lt;code&gt;groups:get&lt;/code&gt;, then pass the labelId.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Top-level comments need &lt;code&gt;parentId = rootId&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This is the most unintuitive piece of Skool's data model. To create a top-level comment on a post, you set BOTH &lt;code&gt;parentId&lt;/code&gt; AND &lt;code&gt;rootId&lt;/code&gt; to the post's ID. To reply to an existing comment, you set &lt;code&gt;rootId&lt;/code&gt; to the original post and &lt;code&gt;parentId&lt;/code&gt; to the comment you're replying to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"posts:createComment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"rootId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"post-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parentId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"post-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;same&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;rootId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;top-level&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Skip this and you get a 404 that says nothing useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;posts:update&lt;/code&gt; body shape is flat, not wrapped
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;posts:create&lt;/code&gt; wraps its data in a &lt;code&gt;metadata&lt;/code&gt; object. &lt;code&gt;posts:update&lt;/code&gt; does NOT — it expects flat fields. Sending the wrapper returns 200 OK and silently ignores your update.&lt;/p&gt;

&lt;p&gt;The actor handles the shape difference for you. If you're talking to the Skool API directly, this will burn you for a day. (It burned me for a day.)&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;classroom:updateCourse&lt;/code&gt; silently resets &lt;code&gt;privacy&lt;/code&gt; to 0
&lt;/h3&gt;

&lt;p&gt;If you PUT a course with a partial body, Skool quietly resets &lt;code&gt;privacy&lt;/code&gt; (your paywall) to &lt;code&gt;0&lt;/code&gt; (Open) and &lt;code&gt;amount&lt;/code&gt; (price) to &lt;code&gt;0&lt;/code&gt;. Tier gating is preserved. Privacy and amount are not.&lt;/p&gt;

&lt;p&gt;I caught this against twelve production courses. The actor's &lt;code&gt;updateCourse&lt;/code&gt; does a read-then-write internally: fetches the current state, merges your input on top, writes the full body. Slower by ~200ms, but your paywall doesn't disappear.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;code&gt;BUILDID_STALE&lt;/code&gt; 404s are usually transient
&lt;/h3&gt;

&lt;p&gt;Skool deploys a new build of their frontend, your cached buildId goes stale, you get 404s on reads. The actor's retry handler refreshes the buildId from the homepage and retries automatically.&lt;/p&gt;

&lt;p&gt;If you see this in your error logs and it self-resolves 30 minutes later, that was a Skool deploy mid-flight (or a Cloudflare blip on Apify's egress IP). The actor logs &lt;code&gt;system:debug&lt;/code&gt; snapshots so you can diagnose without redeploying.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. &lt;code&gt;x402-payment-required&lt;/code&gt; ≠ payment problem
&lt;/h3&gt;

&lt;p&gt;If the actor returns &lt;code&gt;x402-payment-required&lt;/code&gt; on every action including reads, this is &lt;strong&gt;not&lt;/strong&gt; a billing issue. It's Apify's &lt;code&gt;notice: UNDER_MAINTENANCE&lt;/code&gt; flag, triggered automatically when a published actor fails its daily quality check.&lt;/p&gt;

&lt;p&gt;The actor's default action is &lt;code&gt;system:health&lt;/code&gt;, which never throws — so the quality check stays green. If you ever see this flag, clear it with one PUT to the Apify API. (Documentation in the actor README.)&lt;/p&gt;

&lt;h3&gt;
  
  
  7. &lt;code&gt;members:approve&lt;/code&gt; and &lt;code&gt;members:reject&lt;/code&gt; need &lt;code&gt;memberId&lt;/code&gt;, not &lt;code&gt;id&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Skool returns two IDs per member: &lt;code&gt;id&lt;/code&gt; is the global user ID (stable across Skool), &lt;code&gt;memberId&lt;/code&gt; is the group-specific membership ID. Approve/reject/ban operations need &lt;code&gt;memberId&lt;/code&gt;. Using &lt;code&gt;id&lt;/code&gt; returns HTTP 404 with no useful message.&lt;/p&gt;

&lt;p&gt;The actor surfaces both fields and uses the correct one. If you're talking to Skool directly, this single mismatch will silently kill a batch of 50 approvals.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I use this in production
&lt;/h2&gt;

&lt;p&gt;I'm not building this as a toy. CAR has 484 members, 19 courses in the classroom, daily posts, daily approvals, a podcast that syndicates new episodes to the community. None of that is manual.&lt;/p&gt;

&lt;p&gt;A few examples (each one is its own deep-dive post — links below):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Publishing podcast episodes to the classroom 100% automatically.&lt;/strong&gt; New episode lands on &lt;code&gt;eslahoradeaprender.com&lt;/code&gt; → my pipeline syndicates the show notes to the community classroom as a new lesson with the YouTube thumbnail, all in under 30 seconds. Twelve episodes published this way so far, zero manual clicks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uploading an 18-course classroom from markdown.&lt;/strong&gt; When I shipped the curriculum, every course (folders, lessons, covers, tier gates) came from &lt;code&gt;.md&lt;/code&gt; files in a local directory. One script, ~3 hours of total runtime to push 18 courses. The R-PUT-COURSE gotcha above came from this exact project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Daily engagement bot for the community feed.&lt;/strong&gt; Detects unanswered posts in the community feed, drafts a reply using the community's content (podcast back-catalog, blog, course corpus), sends to Telegram for approval, publishes on click.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the deep-dives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/how-i-publish-podcast-episodes-to-a-skool-classroom-100-automatically-37a4"&gt;How I Publish Podcast Episodes to Skool 100% Automatically&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://dev.to/cristiantalasanchez/how-i-uploaded-an-18-course-classroom-to-skool-with-one-script-and-the-bug-that-almost-killed-my-2pi1"&gt;How I Uploaded an 18-Course Classroom With One Script&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;The actor is on Apify, ready to use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Skool API — Posts, Members &amp;amp; Classroom&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pricing is pay-per-event: $0.005 per result returned, $0.01 per write operation, $0.05 for Playwright-based deep scrapes. No subscription. If you're testing it, you'll spend cents.&lt;/p&gt;

&lt;p&gt;A complete 10-line example to create a post in your community:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/cristiantala~skool-all-in-one-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "action": "posts:create",
    "groupSlug": "your-skool-slug",
    "cookies": "auth_token=...; client_id=...; aws-waf-token=...",
    "params": {
      "title": "Hello from the API",
      "content": "First post via Apify.",
      "labelId": "your-category-id"
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For workflow tools, it's a single Apify node in n8n, Make.com, or Zapier. Pass &lt;code&gt;action&lt;/code&gt;, &lt;code&gt;groupSlug&lt;/code&gt;, &lt;code&gt;cookies&lt;/code&gt;, and the action-specific &lt;code&gt;params&lt;/code&gt;. Same shape everywhere.&lt;/p&gt;

&lt;p&gt;If you're building AI agents (Claude, ChatGPT function calling, LangChain, OpenClaw) that need to interact with a Skool community: same actor, called as a tool. The action names map cleanly to capabilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The actor covers most of Skool's surface area, but not all. On the wishlist (open as GitHub issues on the actor's Apify page):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pin to Course Page&lt;/strong&gt; — pin a post to a specific course view rather than the global feed. Endpoint exists in Skool's UI; needs capture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About Page API&lt;/strong&gt; — programmatically read/write a group's About page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-page drip schedules&lt;/strong&gt; — investigating whether Skool supports drip at the lesson level (not just course level).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube video embed in lessons&lt;/strong&gt; — Skool generates an internal video ID when you paste a YouTube URL in the editor. We can render thumbnails today, but native embeds need that endpoint captured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a Skool automation that's currently impossible because the endpoint isn't covered, open an issue. Most of them are an afternoon of Playwright capture away.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the source is private
&lt;/h2&gt;

&lt;p&gt;A common question: "Is this open source?"&lt;/p&gt;

&lt;p&gt;It's not. The TypeScript SDK behind the actor (&lt;code&gt;skool-js&lt;/code&gt;) and the actor wrapper itself live in a private GitHub repo. There are three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The actor IS the product.&lt;/strong&gt; If the SDK were public on npm, the conversion path to actual revenue collapses. The actor pays for itself plus my time maintaining the reverse-engineering against Skool's deploys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Skool deploys frequently.&lt;/strong&gt; When the WAF flow changes, the buildId path changes, or a new captcha is added, the actor needs a patch within hours. A private repo with paid distribution gives me a sustainable maintenance loop. An open repo with infinite forks does not.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The reverse-engineering itself has cost.&lt;/strong&gt; Each endpoint captured took 30 minutes to several hours of UI interception. That work compounds in the actor — not in a free clone.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you need self-hosted SDK access for a specific use case, that's a different conversation; reach out. For everything else, the actor is the fastest path from "I have a Skool community" to "my Skool community runs itself."&lt;/p&gt;




&lt;p&gt;If this guide was useful, the best way to help me keep improving the actor is to use it. Every run validates a real use case and tells me what to capture next. Find a gap or hit a gotcha I haven't documented? Open an issue on the actor page — they get answered.&lt;/p&gt;

</description>
      <category>skool</category>
      <category>api</category>
      <category>automation</category>
      <category>n8n</category>
    </item>
    <item>
      <title>Cambié el Cerebro de Mi Coding Agent: De Opus a Modelos Open-Source por $30/mes</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Tue, 12 May 2026 19:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/cambie-el-cerebro-de-mi-coding-agent-de-opus-a-modelos-open-source-por-30mes-3d2e</link>
      <guid>https://dev.to/cristiantalasanchez/cambie-el-cerebro-de-mi-coding-agent-de-opus-a-modelos-open-source-por-30mes-3d2e</guid>
      <description>&lt;h2&gt;
  
  
  Cómo Reemplazar Claude Pro ($20/mes) y Ahorrar un 96% en Producción
&lt;/h2&gt;

&lt;p&gt;Hace dos años, si me hubieran dicho que iba a reemplazar Claude Pro por algo open-source, me hubiera muerto de risa. «Seguí soñando», te habría dicho. «Los modelos de arriba son mejores porque sí.»&lt;/p&gt;

&lt;p&gt;Abril 2026. Anthropic removió silenciosamente a Claude Code del plan Pro de $20/mes. La página de precios quedó con una X donde antes había un check. No hubo comunicado. No hubo email. Un developer lo tweeteó y generó 900K views en Twitter y 400+ comentarios furiosos en Hacker News.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué pasó realmente?&lt;/strong&gt; Que el plan «Pro» nunca fue para uso real de un coding agent. Si estás corriendo un agente 3-4 horas por día, el costo real de Opus no es $20/mes — es &lt;strong&gt;$11,250/mes por desarrollador&lt;/strong&gt;. Esto no es un bug. Es una feature del modelo de suscripción: te hace pensar que pagás $20 cuando en realidad consumís $11,250.&lt;/p&gt;

&lt;h3&gt;
  
  
  El costo real de Opus en producción: hasta $11,250/mes por desarrollador
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mi benchmark corrió 8,000+ tests en 70 modelos para responder exactamente esta pregunta. Los números duelen:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El escenario coding agent es el más revelador. Un agente que lee ~50K tokens de contexto por archivo y genera ~5K tokens de output por archivo. Si haces 1,000 archivos por día, Claude Opus te sale $11,250/mes. La alternativa open-source más capaz para ese caso de uso sale $484/mes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calidad no es el problema.&lt;/strong&gt; Opus 4.7 tiene quality score de 8.08 — top 5 entre todos los modelos medidos. El problema es que estás pagando por una capability que no necesitas en la forma en que la estás usando.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thinking forzado empeora tus agentes: 8 de 9 modelos rinden peor
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Acá viene el hallazgo más contraintuitivo del benchmark.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De los 9 modelos hybrid medidos con &lt;code&gt;force_reasoning=high&lt;/code&gt; en la suite de tests agénticos multi-turno:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;8 de 9 empeoran&lt;/strong&gt; su score vs sin thinking forzado&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Opus 4.7: &lt;strong&gt;-0.67 puntos&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sonnet 4.6: &lt;strong&gt;-0.50 puntos&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hermes 4 70B: &lt;strong&gt;-0.54 puntos&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solo &lt;strong&gt;Kimi K2.5 sube&lt;/strong&gt; (+0.73 puntos) — la excepción&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un sistema que es 95% correcto en cada paso es solo &lt;strong&gt;36% correcto en 20 pasos&lt;/strong&gt;. No es un failure de prompting. Es un &lt;strong&gt;architecture failure&lt;/strong&gt;. La forma en que orchestration, persistence, tool driving y verification composition determinan el resultado tanto como el modelo mismo.&lt;/p&gt;

&lt;p&gt;La implicación para founders que arman agentes en n8n o OpenClaw: &lt;strong&gt;no pagues premium por modelos con thinking forzado&lt;/strong&gt;. Estás pagando más por un resultado peor en multi-turno real.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Por qué 8 de 9 modelos rinden peor con reasoning forzado?
&lt;/h4&gt;

&lt;p&gt;El reasoning extendido extiende la cadena de pensamiento del modelo antes de emitir una respuesta. En benchmarks estáticos (HumanEval, MATH), esto ayuda. En agentes multi-turno que interactúan con herramientas, archivos y APIs en tiempo real, cada segundo adicional de «pensar» es un segundo en que el estado del sistema puede cambiar.&lt;/p&gt;

&lt;p&gt;El modelo piensa más, pero el mundo también cambió mientras pensaba. La respuesta correcta cuando empezó a procesar ya no es correcta cuando termina. Esto lo confirma también el postmortem de Anthropic del 23 de abril de 2026: &lt;em&gt;«On March 4, we changed Claude Code’s default reasoning effort from high to medium to reduce very long latency.»&lt;/em&gt; — el mismo Anthropic encontró que menos thinking era mejor para la experiencia de usuario. Y cuando revirtieron a high effort después de las quejas, descubrieron que venía con sus propios problemas de calidad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Provider matters: Groq direct supera a OpenRouter por +0.16 a +0.25 puntos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Otro hallazgo del benchmark que no es obvio a menos que midas.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El mismo modelo rinde mejor cuando el provider es directo (Groq, NIM, Xiaomi) que cuando pasa por un agregador como OpenRouter. Patrón consistente verificado en 4 proveedores con el mismo modelo.&lt;/p&gt;

&lt;p&gt;Groq usa hardware dedicado (LPU — Language Processing Unit) en lugar de GPUs tradicionales. El resultado: hasta 10x más velocidad de inferencia. Los números reales de &lt;a href="https://www.morphllm.com/llm-api" rel="noopener noreferrer"&gt;MorphLLM&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Llama 3.1 8B @ Groq: &lt;strong&gt;840 tok/s&lt;/strong&gt; (el más rápido del mercado)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Llama 4 Scout @ Groq: &lt;strong&gt;594 tok/s&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Competencia GPU-based: típicamente 80-150 tok/s&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Groq no solo es más rápido — el mismo Llama 3.3 70B rinde mejor ahí que en OpenRouter porque el routing overhead del agregador introduce latencia y variabilidad. La recomendación entonces no es solo «elegí el modelo correcto». Es &lt;strong&gt;«elegí el modelo correcto EN el provider correcto»&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  El costo de la dependencia: por qué un founder no debería depender de un solo proveedor a $100/mes
&lt;/h3&gt;

&lt;p&gt;Les cuento algo que me costó dos exits aprender.&lt;/p&gt;

&lt;p&gt;En Pago Fácil, en 2018, dependíamos de un solo proveedor de pagos para el core del negocio. Cuando el proveedor decidió cambiar sus condiciones a mitad de año, nos dejó 60 días para renegociar o migrar. 60 días con un negocio que procesaba $2M/mes en transacciones. Yo estaba solo — sin cofundadores, sin equipo de legal sofisticado, sin leverage. Tuve que aceptar las condiciones porque no había alternativa real en ese momento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La dependencia tiene un costo que no aparece en el sticker price. Lo escribí en detalle en «&lt;a href="https://dev.to/la-dependencia-perfecta-cuando-tu-proveedor-de-ia-se-cae-y-tu-te-quedas-mirando/"&gt;La dependencia perfecta&lt;/a&gt;«.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Con los modelos de IA pasa lo mismo. Si tu flujo de automatización completo depende de Opus a $25/MTok y Anthropic decide subir precios (como ya hizo removiendo Claude Code de Pro), no tienes opción real. O aceptás las nuevas condiciones o reconstruís todo desde cero.&lt;/p&gt;

&lt;p&gt;La estrategia correcta no es «encuentra el modelo más barato». Es &lt;strong&gt;«arquitecta para tener siempre un plan B que no te destruya»&lt;/strong&gt;. Esto significa:&lt;/p&gt;

&lt;p&gt;-模型的que usas en producción tener al menos un backup en otro provider que renda comparable&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;NUNCA architecturalizar con la assumption de que un solo provider va a estar disponible o accesible en 12 meses&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Preferir modelos con licencias open-source (Apache 2.0, MIT) sobre modelos proprietary cuando el delta de calidad lo permita&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8 de los 10 primeros del benchmark usan licencia Apache 2.0 o MIT. No es casualidad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top 10 del benchmark: 8 de 10 son open-source
&lt;/h3&gt;

&lt;p&gt;El open-source no es «la opción del pobre». Es la opción que maximiza valor real por dólar invertido — especialmente cuando la métrica es «qué tan bien funciona en MI agente de producción», no «qué tan bien sale en HumanEval».&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso a paso: cómo migré mi stack de $200/mes a $30/mes
&lt;/h3&gt;

&lt;p&gt;Esto es lo que hice en la práctica, no la teoría.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semana 1: Evaluar&lt;/strong&gt; Corrí el benchmark completo en mis casos de uso reales — no en los benchmarks sintéticos. Los que importaban: automation scripts de n8n, parsing de emails, generación de reportes, code review de PRs en GitHub. Identifiqué qué modelos rendían &amp;gt;=90% de la calidad de Opus en CADA caso de uso específico.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semana 2-3: Dual run&lt;/strong&gt; Corriste ambos sistemas en paralelo durante 2 semanas. OpenCode con &lt;strong&gt;&lt;a href="https://dev.to/minimax-m27-modelo-ia-gratuito-open-source-produccion-2026/"&gt;MiniMax M2.7-highspeed&lt;/a&gt;&lt;/strong&gt; para desarrollo day-to-day. Claude Pro seguía disponible para arquitectura y decisiones complejas donde Opus genuinamente aporta. Medí output quality con revisiones manuales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semana 4: Cortar&lt;/strong&gt; Apagué la suscripción a Claude Pro cuando el dual run showed &amp;lt;5% de tareas donde Opus había sido significativamente mejor. Exploré esta dinámica a fondo en &lt;a href="https://dev.to/claude-code-sin-pagar-200-dolares-al-mes/"&gt;Claude Code sin pagar $200 al mes&lt;/a&gt;. El corte fue en marzo 2026 — antes del movimiento de Anthropic, pero la decisión ya estaba tomada con datos propios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Antes: $200/mes en Claude Pro (usaba API directa + Pro seat)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Después: $30/mes aproximadamente ($20 MiniMax subscription + $10 Ollama Cloud + electricidad)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Productividad en tareas de coding: no medí baja objetiva&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tasks donde todavía uso Opus (API directa, pay-per-use): ~2-3 por semana, &amp;lt;$20/mes adicional&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stack recomendado por presupuesto
&lt;/h3&gt;

&lt;h4&gt;
  
  
  $0/mes: 100% local con Ollama
&lt;/h4&gt;

&lt;p&gt;Si tienes hardware decente (32GB+ RAM), puedes correr modelos open-source directamente en tu máquina. DeepSeek-Coder V3, Qwen 2.5 Coder 32B, Mistral 7B — todos disponibles en Ollama con install one-liner. Tengo una &lt;a href="https://dev.to/herramientas-de-ia-self-hosted-la-guia-completa-para-2026/"&gt;guía completa de herramientas self-hosted&lt;/a&gt; donde reviso las opciones en detalle.&lt;/p&gt;

&lt;p&gt;Costo real: $0/mes en subscriptions. Solo electricidad (~2-3/kWh dependiendo de dónde estés).&lt;/p&gt;

&lt;p&gt;Limitación: latencia más alta que cloud, sin internet no funciona. Para tareas batch o que no son tiempo-real, perfectamente viable.&lt;/p&gt;

&lt;h4&gt;
  
  
  $20-50/mes: Groq + Ollama Cloud
&lt;/h4&gt;

&lt;p&gt;Groq tier gratuito tiene 40 RPM con modelos como Llama 3.1 8B y 70B. Para automatización con volumen bajo-medio, esto alcanza. Si necesitas más volumen, el tier pago de Groq corre ~$15/mes por 500K tokens/mes en los modelos más rápidos.&lt;/p&gt;

&lt;p&gt;Complementás con Ollama Cloud para modelos que Groq no tiene.&lt;/p&gt;

&lt;h4&gt;
  
  
  $100+/mes: API directa + Cursor Pro
&lt;/h4&gt;

&lt;p&gt;Si todavía necesitas Opus para tareas complejas con volumen alto, la API directa de Anthropic (pay-per-use) es más flexible que el plan Max $100/mes. Pagas por lo que usás realmente.&lt;/p&gt;

&lt;p&gt;A este nivel de gasto, Cursor Pro ($20/mes) como IDE con Claude Code integration puede reemplazar el workflow completo de desarrollo. No es lo mismo que Claude Code standalone, pero para un developer individual es suficiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  El cierre que Anthropic no te dice
&lt;/h3&gt;

&lt;p&gt;Cuando Anthropic removió Claude Code de Pro, no fue un accidente. Les estaban diciendo algo en código: &lt;strong&gt;«el modelo de suscripción $20 no cierra con el uso real de un coding agent.»&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y tenían razón.&lt;/p&gt;

&lt;p&gt;Para founders que construyen agentes en producción, la alternativa no es «buscar el mejor descuento en Anthropic». Es arquitecturar para producción con modelos que maximized value per dollar en el caso de uso real — y con la resiliencia de no depender de un solo proveedor.&lt;/p&gt;

&lt;p&gt;Todo esto está medido. Los datos del benchmark — 8,000+ runs, 70 modelos — están públicos en GitHub. Publiqué el &lt;a href="https://dev.to/benchmark-de-modelos-ai-para-agentes-openclaw-n8n-abril-2026/"&gt;benchmark completo de abril 2026&lt;/a&gt; con metodología. La calculadora interactiva te deja filtrar por presupuesto, calls/mes y caso de uso.&lt;/p&gt;

&lt;p&gt;No me creas a mí. Corré los números vos mismo.&lt;/p&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ¿Realmente puedo reemplazar Claude Code con un modelo open-source?
&lt;/h4&gt;

&lt;p&gt;Para la mayoría de casos de uso, sí. Para coding asistido (autocomplete, refactors simples, code review), modelos como Llama 3.3 70B o Devstral rinden al nivel de Sonnet 4.6. Para tareas de código complejo o architecture decisions de alto nivel, Opus sigue siendo top. El punto es que no necesitas Opus para todo — solo para lo que realmente lo requiere.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Qué pasa si ya pago Claude Pro?
&lt;/h4&gt;

&lt;p&gt;Si usas Claude Code 3+ horas por día, el plan Pro se te queda corto igual. Los límites de uso de Pro son agresivos para uso agéntico real. La alternativa más económica es API directa de Anthropic + un wrapper como Aider o Cline, que te sale $15-40/mes según uso real.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Groq es confiable para producción?
&lt;/h4&gt;

&lt;p&gt;Groq tiene rate limits más bajos que OpenRouter en el tier gratuito (40 RPM). Para automatización de producción con volumen alto, la recomendación es combinar Groq (para modelos que ya conoces y rinden bien) + un provider de backup para cuando Groq tiene degraded performance. Mi stack usa ambos.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿El costo es realmente tan diferente o es clickbait?
&lt;/h4&gt;

&lt;p&gt;Los $11,250/mes son para un escenario específico: 1,000 archivos de código procesados por día con Opus 4.7. Si tu volumen es menor, el costo baja proporcionalmente. Un developer que usa Claude Code 1 hora por día puede estar en $30-50/mes con API directa. El punto no es que todos van a pagar $11,250/mes — es que el modelo de suscripción &lt;strong&gt;oculta&lt;/strong&gt; el costo real cuando tu uso escala.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Dónde están los datos del benchmark?
&lt;/h4&gt;

&lt;p&gt;Todo el dataset, metodología y código fuente están públicos en &lt;a href="https://github.com/ctala/ai-benchmarks-alternativos" rel="noopener noreferrer"&gt;github.com/ctala/ai-benchmarks-alternativos&lt;/a&gt; bajo licencia MIT. 8,000+ runs, 70 modelos, scoring ponderado por costo real para founders LATAM. La calculadora interactiva está en &lt;a href="https://benchmarks.cristiantala.com" rel="noopener noreferrer"&gt;benchmarks.cristiantala.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/cambie-el-cerebro-de-mi-coding-agent-de-opus-a-modelos-open-source-por-30-mes/" rel="noopener noreferrer"&gt;Cambié el Cerebro de Mi Coding Agent: De Opus a Modelos Open-Source por $30/mes&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/cambie-el-cerebro-de-mi-coding-agent-de-opus-a-modelos-open-source-por-30-mes/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ia</category>
    </item>
    <item>
      <title>The Complete Skool API: 9 Months of Reverse-Engineering 33 Actions (n8n + TypeScript + AI Agents)</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Tue, 12 May 2026 18:16:50 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/the-complete-skool-api-9-months-of-reverse-engineering-33-actions-n8n-typescript-ai-agents-254e</link>
      <guid>https://dev.to/cristiantalasanchez/the-complete-skool-api-9-months-of-reverse-engineering-33-actions-n8n-typescript-ai-agents-254e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: I spent 9 months reverse-engineering Skool.com — the community platform with millions of paying members but no public API. The result is a production &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Apify actor&lt;/a&gt; that handles posts, comments, members, classroom courses, file uploads, Auto DM, and group settings — usable from n8n, Make.com, Zapier, or LLM agents (Claude, ChatGPT, LangChain) with pay-per-event pricing. Documentation, recipes, and the full API reference are at &lt;a href="https://github.com/ctala/skool-api-docs" rel="noopener noreferrer"&gt;github.com/ctala/skool-api-docs&lt;/a&gt;. This post is the technical story: what I learned, where Skool's architecture surprised me, and how this is being used in production today.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The problem: Skool has no public API
&lt;/h2&gt;

&lt;p&gt;Skool is one of the fastest-growing community platforms — used by creators, course sellers, agencies, and SaaS founders to host paying communities ($30K+ MRR cases are common). It has tens of thousands of paying communities, millions of members.&lt;/p&gt;

&lt;p&gt;It has zero public API.&lt;/p&gt;

&lt;p&gt;If you're an admin running a community at scale, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually approving every new member application&lt;/li&gt;
&lt;li&gt;Manually replying to welcome threads&lt;/li&gt;
&lt;li&gt;Manually uploading course content one page at a time&lt;/li&gt;
&lt;li&gt;Manually copying content from other platforms into Skool&lt;/li&gt;
&lt;li&gt;No way to integrate Skool with n8n, Make.com, or your CRM&lt;/li&gt;
&lt;li&gt;No way to build AI agents that operate inside your community&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a $30K MRR community, "manual" stops scaling fast. The official recommendation is "hire a community manager." That's a $3-5K/month line item to do data entry. For a single founder with AI agents available, it's absurd.&lt;/p&gt;

&lt;p&gt;So I started reverse-engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skool API architecture: SSR for reads, REST for writes
&lt;/h2&gt;

&lt;p&gt;When you look at Skool with browser DevTools, you don't see clean REST endpoints. You see two patterns intermixed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reads&lt;/strong&gt; go through Next.js SSR data endpoints: &lt;code&gt;/_next/data/{buildId}/{slug}.json&lt;/code&gt;. These return the same data the page would render server-side, in JSON. Fast, public-ish (still requires auth cookies), and oddly stable. The &lt;code&gt;buildId&lt;/code&gt; changes on every Skool deploy (~weekly), so you need to refresh it dynamically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Writes&lt;/strong&gt; go through a separate REST API at &lt;code&gt;api2.skool.com&lt;/code&gt;. Create post, update comment, approve member, ban — all POST/DELETE to &lt;code&gt;api2.skool.com/...&lt;/code&gt;. Uses &lt;code&gt;Authorization: Bearer ...&lt;/code&gt; with JWT tokens.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This split is unusual. Most platforms either: (a) have a uniform REST/GraphQL API, or (b) hide reads behind an internal &lt;code&gt;/api/...&lt;/code&gt; route on the same domain. Skool does neither.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters for an API consumer&lt;/strong&gt;: you can't just hit one base URL. Your library needs two clients — one for SSR reads (with &lt;code&gt;buildId&lt;/code&gt; rotation logic), one for REST writes (with bearer token rotation logic).&lt;/p&gt;

&lt;h3&gt;
  
  
  The buildId rotation gotcha
&lt;/h3&gt;

&lt;p&gt;Every Skool deploy invalidates the cached &lt;code&gt;buildId&lt;/code&gt;. If your library hardcodes one, all reads stop working until you refresh.&lt;/p&gt;

&lt;p&gt;The fix: extract the current &lt;code&gt;buildId&lt;/code&gt; from the homepage HTML (&lt;code&gt;/&lt;/code&gt;) before reading. Skool exposes it in a &lt;code&gt;&amp;lt;script id="__NEXT_DATA__"&amp;gt;&lt;/code&gt; tag that contains &lt;code&gt;{"buildId":"..."}&lt;/code&gt;. Parse it, cache it, retry your read.&lt;/p&gt;

&lt;p&gt;Initially I extracted from &lt;code&gt;/dashboard&lt;/code&gt;, but Skool quietly removed that route in March 2026. Switched to &lt;code&gt;/&lt;/code&gt; with &lt;code&gt;/about&lt;/code&gt; fallback. Lesson: &lt;code&gt;buildId&lt;/code&gt; extraction needs to live in your library as a refreshable concern, not a constant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Skool data model: posts and comments are the same object
&lt;/h2&gt;

&lt;p&gt;This is the elegant part of Skool's data model and the part most reverse engineers miss.&lt;/p&gt;

&lt;p&gt;In Skool, &lt;strong&gt;a post and a comment are the same database entity&lt;/strong&gt;. The difference is just two fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rootId&lt;/code&gt;: the original post ID. For a top-level post, &lt;code&gt;rootId == id&lt;/code&gt;. For a comment, &lt;code&gt;rootId&lt;/code&gt; points to the post it's commenting on.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;parentId&lt;/code&gt;: the immediate parent. For a top-level post, &lt;code&gt;parentId == id&lt;/code&gt;. For a comment on a post, &lt;code&gt;parentId == postId&lt;/code&gt;. For a nested reply, &lt;code&gt;parentId == commentId&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reply to a post&lt;/strong&gt;: create with &lt;code&gt;rootId = postId, parentId = postId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reply to a comment (nested)&lt;/strong&gt;: create with &lt;code&gt;rootId = postId, parentId = commentId&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit a comment&lt;/strong&gt;: use the post-update endpoint with the comment's ID&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete a comment&lt;/strong&gt;: use the post-delete endpoint with the comment's ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no &lt;code&gt;/comments&lt;/code&gt; endpoint. There is no &lt;code&gt;comments:&lt;/code&gt; namespace. Everything is &lt;code&gt;posts:&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once you see this, the whole API gets simpler. I exposed it as the same &lt;code&gt;Posts&lt;/code&gt; module in my library, with &lt;code&gt;createComment()&lt;/code&gt; just being a thin wrapper around &lt;code&gt;createPost()&lt;/code&gt; that sets &lt;code&gt;rootId&lt;/code&gt; and &lt;code&gt;parentId&lt;/code&gt; correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skool content format: plain text for posts, TipTap JSON for classroom
&lt;/h2&gt;

&lt;p&gt;For posts and comments: &lt;strong&gt;plain text&lt;/strong&gt;. No HTML, no markdown rendering server-side. The Skool editor handles formatting client-side via simple character codes (&lt;code&gt;**bold**&lt;/code&gt; becomes bold in the UI, but the stored content is literal characters).&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;classroom course bodies&lt;/strong&gt;: TipTap JSON. Skool's classroom uses &lt;a href="https://tiptap.dev" rel="noopener noreferrer"&gt;TipTap&lt;/a&gt; (the rich text editor library built on ProseMirror) and stores course/lesson bodies as TipTap JSON documents.&lt;/p&gt;

&lt;p&gt;This split made &lt;code&gt;classroom:setBody&lt;/code&gt; the most complex action in my library. To make it usable by non-developers, I wrote a markdown → TipTap converter from scratch (zero dependencies, ~500 LOC) that handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headings (h1-h6)&lt;/li&gt;
&lt;li&gt;Bold, italic, code, links&lt;/li&gt;
&lt;li&gt;Bullet and ordered lists&lt;/li&gt;
&lt;li&gt;Code blocks&lt;/li&gt;
&lt;li&gt;Blockquote callouts (Skool renders these as colored boxes)&lt;/li&gt;
&lt;li&gt;Tables (simple)&lt;/li&gt;
&lt;li&gt;Images and embeds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you can write your course content in &lt;code&gt;.md&lt;/code&gt; files in Git, push to your repo, and have a CI job publish updates to Skool. Course-as-code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skool API authentication: cookies, JWT, and AWS WAF tokens
&lt;/h2&gt;

&lt;p&gt;Skool sits behind AWS WAF (Web Application Firewall) Captcha. Your authenticated session has three cookies that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;auth_token&lt;/code&gt;: JWT, ~30 day expiry&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client_id&lt;/code&gt;: device fingerprint, ~1 year&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aws-waf-token&lt;/code&gt;: rotating, &lt;strong&gt;~3.5 day expiry&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;code&gt;aws-waf-token&lt;/code&gt; expires and you keep using the cached cookies, you get 403 errors that look like auth failures. The fix isn't to refresh &lt;code&gt;auth_token&lt;/code&gt; — it's to do a full Playwright login (which solves the WAF challenge and gets a fresh &lt;code&gt;aws-waf-token&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;My actor exposes this as &lt;code&gt;auth:login&lt;/code&gt; — runs Playwright once, returns a &lt;code&gt;cookies&lt;/code&gt; string with all three tokens, and your subsequent calls can reuse those cookies for ~3.5 days at ~2s per call (no browser needed for reads/writes once you have valid cookies).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters for scheduled jobs
&lt;/h3&gt;

&lt;p&gt;If you run a cron that hits Skool daily, you need to re-authenticate every 3-3.5 days. Either schedule it explicitly or build a retry-on-403 pattern that triggers re-auth. The actor returns structured &lt;code&gt;errorCategory: "auth_error"&lt;/code&gt; with &lt;code&gt;errorCode: "WAF_EXPIRED"&lt;/code&gt; so n8n / Make.com workflows can branch on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From skool-js TypeScript library to a production Skool API actor on Apify
&lt;/h2&gt;

&lt;p&gt;After 6 months of building &lt;code&gt;skool-js&lt;/code&gt; internally for my own use (operating &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt;, a 500+ member community), I realized other community operators had the same problem. The internal library was solid, the test suite covered ~85% of real-world use cases, but distributing a TypeScript library as the consumption layer was wrong: most community operators aren't developers, and shipping it as open source meant abandoning maintenance the moment my own community didn't need an update.&lt;/p&gt;

&lt;p&gt;The fix: wrap it in an &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Apify actor&lt;/a&gt; with three properties:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single HTTP endpoint&lt;/strong&gt; — any HTTP client (curl, Postman, n8n's HTTP node, Make.com's HTTP module) can call it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay-per-event pricing&lt;/strong&gt; — $0.005 per dataset result, $0.01 per write operation, $0.05 per scrape operation. No subscription, no minimums. You pay for what you use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action-based API&lt;/strong&gt; — single input with &lt;code&gt;action: "posts:create"&lt;/code&gt; (or 33 other actions), &lt;code&gt;groupSlug&lt;/code&gt;, &lt;code&gt;cookies&lt;/code&gt;, and &lt;code&gt;params&lt;/code&gt;. Consistent shape across the entire surface.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Single consumption layer: the &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;Apify actor&lt;/a&gt;, HTTP-callable from anything (n8n, Make.com, Zapier, Pipedream, custom backends, LLM tool-use), pay-per-event pricing, no infra to maintain on your side. The internal &lt;code&gt;skool-js&lt;/code&gt; library powers it but stays private — that's what keeps the actor sustainably maintained instead of becoming another abandoned reverse-engineering project on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  33 Skool API actions: posts, comments, members, classroom, files, groups
&lt;/h2&gt;

&lt;p&gt;The actor exposes these namespaces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posts&lt;/strong&gt; — list, filter (by date, by unanswered, combine criteria), get, create, update, delete, pin/unpin, vote (like/unlike), createComment, getComments (REST, fast, max ~35), &lt;code&gt;getCommentsFull&lt;/code&gt; (Playwright scroll, returns ALL comments in a thread bypassing Skool's REST cap)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Members&lt;/strong&gt; — list active, list pending applications, approve, reject, ban, batch approve&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt; — list all calendar events, list upcoming&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Classroom (courses)&lt;/strong&gt; — create course, create folder, create page (lesson), set body from markdown, update course/page (preserves privacy/min_tier/amount), delete unit (cascades), get full tree, list courses, update resources (downloadable files)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files&lt;/strong&gt; — upload cover image, upload private file (PDF/JSON/ZIP for classroom Resources with &lt;code&gt;privacy:1&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Groups&lt;/strong&gt; — get group info, set Auto DM message (with &lt;code&gt;#NAME#&lt;/code&gt; and &lt;code&gt;#GROUPNAME#&lt;/code&gt; tokens)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System&lt;/strong&gt; — health check (no auth, no Skool calls — deterministic 2s response for monitoring)&lt;/p&gt;

&lt;p&gt;Every action returns either the requested data or a structured error payload (&lt;code&gt;success: false&lt;/code&gt;, &lt;code&gt;errorCode&lt;/code&gt;, &lt;code&gt;errorCategory&lt;/code&gt;, &lt;code&gt;retryable&lt;/code&gt;, &lt;code&gt;hint&lt;/code&gt;). The &lt;code&gt;hint&lt;/code&gt; field is designed for LLM tool-use: an agent can read it and self-correct on errors like missing categories or expired auth.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to integrate Skool with n8n, Make.com, and Zapier
&lt;/h2&gt;

&lt;p&gt;The Skool API actor is designed as a single HTTP endpoint, which makes it drop-in compatible with every workflow automation platform:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;n8n&lt;/strong&gt;: use the HTTP Request node. One node per Skool action. Pattern: &lt;code&gt;auth:login&lt;/code&gt; once → save cookies to workflow variable → reuse cookies across subsequent calls. &lt;a href="https://n8n.io/workflows/14392-auto-approve-skool-community-members-with-gpt-4o-ai-screening/" rel="noopener noreferrer"&gt;Free n8n template here&lt;/a&gt; shows the exact wiring for auto-approving members with GPT-4o screening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make.com&lt;/strong&gt;: use the HTTP module. Same pattern — login once, reuse cookies. The structured &lt;code&gt;errorCategory&lt;/code&gt; field in actor responses lets you build Router branches without try/catch logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zapier&lt;/strong&gt;: works via webhook-trigger + HTTP action. Zapier's free tier supports this but you'll hit the task limit fast on busy communities. n8n self-hosted is the cost-efficient option once you have &amp;gt;10 daily workflow runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pipedream&lt;/strong&gt;: native HTTP support. Drop the actor URL into any Pipedream step, pass &lt;code&gt;cookies&lt;/code&gt; from a stored secret.&lt;/p&gt;

&lt;p&gt;Why a single-endpoint, action-based API beats traditional REST for these platforms: every workflow node maps to one HTTP request with a different &lt;code&gt;action&lt;/code&gt; value. No URL templating, no header juggling per endpoint, no documentation hunt for "is it POST or PUT for editing?". Just &lt;code&gt;action: "posts:update"&lt;/code&gt; and you're done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the Skool API with AI agents (Claude, ChatGPT, MCP, LangChain)
&lt;/h2&gt;

&lt;p&gt;Because every action has a consistent shape and structured error responses with recovery &lt;code&gt;hint&lt;/code&gt; fields, the Skool API actor is unusually well-suited as a &lt;strong&gt;tool&lt;/strong&gt; in LLM tool-calling stacks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic Claude (tool use)&lt;/strong&gt;: define a single tool &lt;code&gt;skool_api&lt;/code&gt; with parameters &lt;code&gt;action&lt;/code&gt; (enum of 33 values), &lt;code&gt;groupSlug&lt;/code&gt;, &lt;code&gt;cookies&lt;/code&gt;, and &lt;code&gt;params&lt;/code&gt;. The model picks the right action per user request. Error hints feed back into the conversation for self-correction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI function calling&lt;/strong&gt;: same pattern, define one function. Function calling format is compatible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LangChain Tool&lt;/strong&gt;: wrap in a &lt;code&gt;Tool&lt;/code&gt; class. The actor returns dataset arrays which LangChain agents handle natively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;: Apify exposes any public actor via &lt;code&gt;https://mcp.apify.com?tools=cristiantala/skool-all-in-one-api&lt;/code&gt;. Configure once in Claude Desktop / Cursor / any MCP client, and the model sees all 33 actions as discoverable tools. No separate server to host — Apify handles the MCP layer for you, and the same pay-per-event billing applies (publishers earn from MCP invocations the same as regular runs).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom AI agents (OpenClaw, Cline, Aider, etc.)&lt;/strong&gt;: any agent that supports HTTP tool calls works. The actor docs include schemas in JSON Schema format for autogenerated tool definitions.&lt;/p&gt;

&lt;p&gt;This is where the "structured error payload with &lt;code&gt;hint&lt;/code&gt; field" design pays off. A naive HTTP wrapper around Skool's REST endpoints would return raw 422 errors. The actor returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MISSING_CATEGORY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"errorCategory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skool_api_error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"This Skool group requires posts to have a category. Pass `params.labelId` in posts:create. Get available labels with groups:get."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An AI agent reads that &lt;code&gt;hint&lt;/code&gt; and self-corrects without human intervention. That's the difference between a wrapped REST API and an API designed for agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production use cases (real examples)
&lt;/h2&gt;

&lt;p&gt;These are workflows running in production today:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Auto-approve members with AI screening
&lt;/h3&gt;

&lt;p&gt;n8n workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cron every 6h → &lt;code&gt;auth:login&lt;/code&gt; (if cookies expired)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;members:pending&lt;/code&gt; → returns list of pending applications with &lt;code&gt;whyJoin&lt;/code&gt; text&lt;/li&gt;
&lt;li&gt;For each: pass &lt;code&gt;whyJoin&lt;/code&gt; + LinkedIn URL to GPT-4o with a screening prompt ("does this person fit the community? rate 1-10")&lt;/li&gt;
&lt;li&gt;If rating ≥ 7 → &lt;code&gt;members:approve&lt;/code&gt;. If &amp;lt; 4 → &lt;code&gt;members:reject&lt;/code&gt; with message. Else → manual review in Telegram.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: hours per week saved. Spam applications filtered in seconds. &lt;a href="https://n8n.io/workflows/14392-auto-approve-skool-community-members-with-gpt-4o-ai-screening/" rel="noopener noreferrer"&gt;Published as a free n8n template here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Auto-DM new members with personalized welcome
&lt;/h3&gt;

&lt;p&gt;One-time setup with &lt;code&gt;groups:setAutoDM&lt;/code&gt;, then runs forever inside Skool's own infra (Skool sends the DM, the actor just sets the template). Use &lt;code&gt;#NAME#&lt;/code&gt; and &lt;code&gt;#GROUPNAME#&lt;/code&gt; tokens for personalization. Skool's UI limits this to 300 chars, but you can fit a meaningful welcome + first action.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Publish a complete course from markdown files
&lt;/h3&gt;

&lt;p&gt;I write course content in &lt;code&gt;.md&lt;/code&gt; files in a private GitHub repo. CI job:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detects changes to a course directory&lt;/li&gt;
&lt;li&gt;For each new lesson: &lt;code&gt;classroom:createPage&lt;/code&gt; + &lt;code&gt;classroom:setBody&lt;/code&gt; (markdown → TipTap conversion)&lt;/li&gt;
&lt;li&gt;For each updated lesson: &lt;code&gt;posts:update&lt;/code&gt; with new content&lt;/li&gt;
&lt;li&gt;For attached resources (PDFs): &lt;code&gt;files:uploadFile&lt;/code&gt; (with &lt;code&gt;privacy:1&lt;/code&gt;) + &lt;code&gt;classroom:updateResources&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Course-as-code. Lessons get reviewed via PR. Skool stays in sync with the repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Scrape ALL comments in a thread (bypass Skool's ~35 REST cap)
&lt;/h3&gt;

&lt;p&gt;Skool's REST endpoint for comments returns a maximum of ~35 per thread. For threads with hundreds (welcome threads, AMA posts, popular discussions), &lt;code&gt;posts:getCommentsFull&lt;/code&gt; uses Playwright to scroll the post page and extract every comment from the DOM. Slower (~30-60s) and costs $0.05 per invocation, but returns everything.&lt;/p&gt;

&lt;p&gt;I use this to audit my welcome thread: 229 introductions, find anyone I haven't replied to yet, generate personalized welcome messages, batch reply.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Auto-reply to unanswered posts
&lt;/h3&gt;

&lt;p&gt;Filter posts by &lt;code&gt;commentCount === 0&lt;/code&gt; after 24h, run them through an LLM with the community's context, generate a thoughtful first reply, post via &lt;code&gt;posts:createComment&lt;/code&gt; with manual approval before send. Stops valuable questions from sitting in the void.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skool API alternatives: choosing the right tool for your use case
&lt;/h2&gt;

&lt;p&gt;There are roughly three approaches today to programmatic access to Skool:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subscription-based API services&lt;/strong&gt; — third-party developers who built their own reverse-engineered API and resell access via API keys. These typically focus on read operations (list posts, list members) and have limited write coverage. Pricing is monthly subscription, regardless of usage. Good fit if you have predictable monthly volume and only need read access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generic scrapers on Apify Store&lt;/strong&gt; — single-purpose actors that extract one type of data (member emails, course videos, post lists). No write operations. Useful for one-off data extraction, not for ongoing automation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full read+write Skool API actor&lt;/strong&gt; — pay-per-event, complete CRUD across all surface area (posts, comments, members, classroom, files, groups, Auto DM). The Apify actor I built falls in this category. Best fit if you need ongoing writes (auto-approve, auto-comment, course publishing, Auto DM updates).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Subscription API services&lt;/th&gt;
&lt;th&gt;Generic Apify scrapers&lt;/th&gt;
&lt;th&gt;This Skool API actor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read access&lt;/td&gt;
&lt;td&gt;Limited endpoints&lt;/td&gt;
&lt;td&gt;Single purpose&lt;/td&gt;
&lt;td&gt;All 33 actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write access&lt;/td&gt;
&lt;td&gt;Very limited&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Full CRUD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classroom support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Some scrapers only&lt;/td&gt;
&lt;td&gt;Full (create, update, delete, body, resources)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto DM&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;groups:setAutoDM&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Monthly subscription&lt;/td&gt;
&lt;td&gt;Pay-per-event&lt;/td&gt;
&lt;td&gt;Pay-per-event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Predictable read volume&lt;/td&gt;
&lt;td&gt;One-off extraction&lt;/td&gt;
&lt;td&gt;Ongoing community automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI agent ready&lt;/td&gt;
&lt;td&gt;Manual schema&lt;/td&gt;
&lt;td&gt;Manual schema&lt;/td&gt;
&lt;td&gt;Action-based + hint field&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The "best" tool depends on your use case. If you only need to read data once, a generic scraper is fine. If you need ongoing writes (auto-approve members, auto-comment, course publishing, Auto DM updates), the full read+write actor is the only option that won't hit limits.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Try the Skool API actor&lt;/strong&gt;: &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;apify.com/cristiantala/skool-all-in-one-api&lt;/a&gt;. First call gets you a &lt;code&gt;cookies&lt;/code&gt; string you can reuse for 3.5 days. Pay-per-event means typical "auto-approve 10 members" run costs $0.10. No subscription, no minimums. Used in production at CAR (500+ members) — before: 4h/week of manual approvals; after: 10 min/week of review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why I'm not building Skool's "official" API
&lt;/h2&gt;

&lt;p&gt;Skool will likely build a public API eventually. When they do, mine becomes redundant. That's fine.&lt;/p&gt;

&lt;p&gt;In the meantime: every community operator running at scale today either has this problem solved (using a tool like mine, or a custom in-house scraper) or doesn't scale. The market for community operations automation is real — Discord has Apps, Slack has Bots, Circle has Workflows, every modern platform has SOME automation surface. Skool's absence here is the gap, and someone has to fill it until they do.&lt;/p&gt;

&lt;p&gt;The actor itself is the product, but everything around it is in the open: &lt;a href="https://github.com/ctala/skool-api-docs" rel="noopener noreferrer"&gt;github.com/ctala/skool-api-docs&lt;/a&gt; has the full API reference, recipes, and a CHANGELOG that tracks every Skool-side change I detect. If you're a Skool community operator and you want to automate, the actor is one HTTP call away. If you're someone at Skool reading this — please ship a public API. I'll happily deprecate the actor when you do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture decisions I'd make again
&lt;/h2&gt;

&lt;p&gt;If I had to rebuild from scratch tomorrow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cookie reuse with explicit refresh action&lt;/strong&gt; — better than transparent re-auth. Users want to control when Playwright runs (it's the expensive call).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action-based API instead of REST-style endpoints&lt;/strong&gt; — &lt;code&gt;posts:create&lt;/code&gt; reads better than &lt;code&gt;POST /posts&lt;/code&gt; when you're building tool-use schemas for LLMs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured error payloads with &lt;code&gt;hint&lt;/code&gt; field&lt;/strong&gt; — saved me from writing exhaustive error docs. The hint tells the user (or LLM agent) exactly what to do next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown → TipTap converter as a separate exported function&lt;/strong&gt; — testable, reusable, and the most common request from users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never throw, always push&lt;/strong&gt; — every error becomes a &lt;code&gt;success: false&lt;/code&gt; dataset item. Apify runs never &lt;code&gt;exit_fail&lt;/code&gt;. Workflows can branch on errorCategory without try/catch.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The one I'd change: I'd start with TypeScript strict mode from day 1. I retrofitted it after the library was already large and that was painful.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;On the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt; (list/create/RSVP) — endpoints discovered but not yet stable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics&lt;/strong&gt; (engagement, revenue, member growth) — currently returns empty &lt;code&gt;pageProps&lt;/code&gt;, likely needs paid Skool plans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat / DMs&lt;/strong&gt; — would require a different auth flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; — likely Elasticsearch-backed, endpoint TBD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Send email to all members" toggle on posts:create&lt;/strong&gt; — discovered the field, needs validation in test community&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt; — Skool doesn't expose them yet, would need polling fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of these are blocking you, open an issue at &lt;a href="https://github.com/ctala/skool-api-docs" rel="noopener noreferrer"&gt;github.com/ctala/skool-api-docs&lt;/a&gt; — prioritized by demand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skool API FAQ — common questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Skool have a public API?
&lt;/h3&gt;

&lt;p&gt;No. Skool does not provide a public API. The endpoints used by the Skool web app are not documented or supported for external use. This actor and library reverse-engineer those endpoints and expose them as a clean, AI-friendly Skool API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is reverse engineering the Skool API legal?
&lt;/h3&gt;

&lt;p&gt;Reverse engineering for interoperability with software you legitimately use is broadly accepted in most jurisdictions (US DMCA section 1201(f), EU Software Directive 2009/24/EC). I only use it against communities where I am an admin or have explicit permission. This is the same legal framing under which thousands of third-party Twitter/X clients, scraping libraries, and platform automation tools operate.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I authenticate with the Skool API?
&lt;/h3&gt;

&lt;p&gt;Two options: (1) &lt;strong&gt;Email + password&lt;/strong&gt; every call (uses Playwright, slower at ~10s, simpler), or (2) &lt;strong&gt;Cookie reuse&lt;/strong&gt; — run &lt;code&gt;auth:login&lt;/code&gt; once, save the returned cookies string, pass in subsequent calls for ~2s response time. Cookies last ~3.5 days before the AWS WAF token rotates. See the authentication section above.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the rate limit of the Skool API?
&lt;/h3&gt;

&lt;p&gt;Skool doesn't publish official rate limits. Empirically: ~60 reads/minute and ~20-30 writes/minute work without 429 errors. The library handles automatic retry on transient 429s with exponential backoff. For batch operations (e.g. approving 100 pending members), the actor paces requests automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use the Skool API with n8n?
&lt;/h3&gt;

&lt;p&gt;Yes. The actor is HTTP-callable from any platform with HTTP nodes — n8n, Make.com, Zapier, Pipedream, custom backends. There's a &lt;a href="https://n8n.io/workflows/14392-auto-approve-skool-community-members-with-gpt-4o-ai-screening/" rel="noopener noreferrer"&gt;free n8n template&lt;/a&gt; showing the full auto-approve workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is this different from third-party Skool API services?
&lt;/h3&gt;

&lt;p&gt;Three differences. &lt;strong&gt;Coverage&lt;/strong&gt;: 33 actions including full classroom, file uploads, and Auto DM — most third-party services are read-only. &lt;strong&gt;Pricing&lt;/strong&gt;: pay-per-event ($0.005-$0.05 per call) instead of fixed monthly subscription — cheaper for low-to-medium usage. &lt;strong&gt;AI agent design&lt;/strong&gt;: action-based API with structured error hints, optimized for LLM tool use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I publish Skool courses programmatically?
&lt;/h3&gt;

&lt;p&gt;Yes. The &lt;code&gt;classroom:*&lt;/code&gt; actions create courses, folders, and pages. The &lt;code&gt;classroom:setBody&lt;/code&gt; action accepts markdown and converts to Skool's internal TipTap JSON format. You can publish a complete course from &lt;code&gt;.md&lt;/code&gt; files in a Git repo via CI.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many Skool comments can I retrieve from a thread?
&lt;/h3&gt;

&lt;p&gt;Skool's REST endpoint for comments caps at ~35 per thread. For threads with hundreds of comments (welcome posts, AMAs), the &lt;code&gt;posts:getCommentsFull&lt;/code&gt; action uses Playwright to scroll the page and extract every comment. $0.05 per invocation but bypasses the cap entirely. Critical for community audits where you need to verify every member's introduction got a reply.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens if Skool changes their API?
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;skool-js&lt;/code&gt; library is actively maintained. When Skool deploys a new version (typically weekly), the &lt;code&gt;buildId&lt;/code&gt; changes — the actor handles this automatically by refreshing from the homepage. WAF token expiration is handled (auto-retry with re-auth). Breaking changes are documented in the &lt;a href="https://github.com/ctala/skool-api-docs" rel="noopener noreferrer"&gt;CHANGELOG&lt;/a&gt; of the docs repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I expose this Skool API as an MCP server for Claude / Cursor?
&lt;/h3&gt;

&lt;p&gt;Yes. Apify exposes any public actor via &lt;code&gt;https://mcp.apify.com?tools=cristiantala/skool-all-in-one-api&lt;/code&gt;. Configure once in your MCP client (Claude Desktop, Cursor, Cline), and the model sees all 33 Skool API actions as discoverable tools. Same pay-per-event billing applies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Actor&lt;/strong&gt;: &lt;a href="https://apify.com/cristiantala/skool-all-in-one-api" rel="noopener noreferrer"&gt;apify.com/cristiantala/skool-all-in-one-api&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs + recipes&lt;/strong&gt; (open, MIT): &lt;a href="https://github.com/ctala/skool-api-docs" rel="noopener noreferrer"&gt;github.com/ctala/skool-api-docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n template (free)&lt;/strong&gt;: &lt;a href="https://n8n.io/workflows/14392-auto-approve-skool-community-members-with-gpt-4o-ai-screening/" rel="noopener noreferrer"&gt;Auto-approve members with GPT-4o&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're operating a Skool community at any scale and this would save you time — try the actor, leave feedback in the Apify Store or open an issue in the docs repo. The pay-per-event pricing means you only pay when it's actually saving you work.&lt;/p&gt;

&lt;p&gt;If this resonated with you and you're building in public around community automation, AI agents, or Skool tooling, I'd love to hear about it. I'm building this stuff in the open at &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;— Cristian Tala&lt;/p&gt;

</description>
      <category>skool</category>
      <category>api</category>
      <category>automation</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Cómo crear una landing page gratis para validar tu idea (con video tutorial y casos reales)</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Mon, 11 May 2026 20:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/como-crear-una-landing-page-gratis-para-validar-tu-idea-con-video-tutorial-y-casos-reales-3c5n</link>
      <guid>https://dev.to/cristiantalasanchez/como-crear-una-landing-page-gratis-para-validar-tu-idea-con-video-tutorial-y-casos-reales-3c5n</guid>
      <description>&lt;p&gt;&lt;em&gt;Si estás validando una idea de negocio, **crear una landing page gratis&lt;/em&gt;* es la diferencia entre validar en horas o gastarte $50-100/mes en herramientas que no necesitas todavía. Acá está el stack completo que uso hoy en producción —incluyendo el repo público que puedes clonar—, video tutorial paso a paso, y los 3 niveles de evolución según en qué fase esté tu proyecto.*&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué la mayoría de emprendedores paga de más en la fase de validación
&lt;/h2&gt;

&lt;p&gt;Lo cuento desde mi propia experiencia: durante años yo pagaba &lt;strong&gt;$99/mes&lt;/strong&gt; en un SaaS de landing pages optimizado para performance. Bien armado, sin queja del producto. Pero cada mes el cargo aparecía y empezaba a doler — porque me daba cuenta de que estaba pagando por algo que yo mismo podía hacer con un stack abierto, en menos tiempo del que pensaba, y sin sacrificar la performance que era lo que me había llevado al SaaS en primer lugar.&lt;/p&gt;

&lt;p&gt;Cuando hice el switch al stack que comparto en este post (HTML estático generado con IA + GitHub Pages, después Astro + Cloudflare Pages para los proyectos serios), mi factura mensual de landing tools pasó de $99 a $0. Tiempo invertido en el switch: un fin de semana. Performance final: igual o mejor.&lt;/p&gt;

&lt;p&gt;Hay un patrón que veo todas las semanas en la comunidad: alguien tiene una idea, decide «validarla en serio», y antes de saber si la idea funciona ya está pagando $200 al mes en herramientas. Carrd $19, Framer $20, Webflow $29, un dominio en GoDaddy con add-ons innecesarios, Mailchimp $30, Hotjar $40, y así.&lt;/p&gt;

&lt;p&gt;Resultado típico: gasta $1,000-2,000 en los primeros tres meses y la idea ni siquiera estaba validada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Soy fiel creyente de contratar servicios.&lt;/strong&gt; Cuando ya tienes tracción real, pagar por un stack profesional acelera todo. &lt;strong&gt;Pero soy fiel creyente también de no gastar dinero para validar ideas.&lt;/strong&gt; En fase de validación, lo que necesitas es: una página que comunique tu propuesta, capture interés, y mida si la gente reacciona. Punto. Eso se puede hacer con costo prácticamente cero.&lt;/p&gt;

&lt;p&gt;La razón por la que la mayoría igual paga $20-99/mes en SaaS de landing pages es porque nadie les contó la alternativa.&lt;/p&gt;

&lt;h2&gt;
  
  
  La filosofía: ser rata para validar, gastar bien cuando ya factures
&lt;/h2&gt;

&lt;p&gt;El frame mental que uso: en cada fase del journey, el founder pregunta dos cosas distintas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fase validación&lt;/strong&gt;: ¿hay demanda real? ¿alguien pagaría por esto? Lo que importa es velocidad de iteración y costo cercano a cero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fase tracción&lt;/strong&gt;: ¿cómo escalo lo que ya funciona? Acá sí pagas por herramientas que te ahorran tiempo y dan calidad consistente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mezclar las dos fases es el error más caro de bootstrapped founders. Pagás por SaaS profesionales antes de validar y, cuando la idea no resulta, sentís que «ya invertiste demasiado para abandonar». Sunk cost fallacy 101.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los 3 niveles del stack según fase del proyecto
&lt;/h2&gt;

&lt;p&gt;Cuando alguien me pregunta «qué uso para mis landings», la respuesta cambia según la fase. Estos son los 3 niveles que recomiendo —y que uso yo mismo en distintos proyectos hoy mismo—:&lt;/p&gt;

&lt;h3&gt;
  
  
  Nivel 1 — Validar rápido (HTML + IA + GitHub Pages)
&lt;/h3&gt;

&lt;p&gt;Para cuando tienes una idea cruda y quieres saber si alguien levanta la mano antes de invertir más tiempo o dinero.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: prompt a Gemini/Claude/ChatGPT → te devuelve un único &lt;code&gt;index.html&lt;/code&gt; estático → subes a un repo público de GitHub → activas GitHub Pages → SSL automático → opcionalmente conectas un dominio personalizado vía Cloudflare DNS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tiempo&lt;/strong&gt;: 18-30 minutos para landing + dominio personalizado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Costo&lt;/strong&gt;: $0 si usas el subdominio &lt;code&gt;usuario.github.io/repo&lt;/code&gt;, o ~$10/año si compras un dominio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cuándo usarlo&lt;/strong&gt;: validación cero-a-uno, MVP de marketing, lead magnet rápido, landing para un experimento de paid ads chico.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este es el nivel que cubro en el video tutorial más abajo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nivel 2 — Landing pulida (Astro + GitHub Pages o Cloudflare Pages)
&lt;/h3&gt;

&lt;p&gt;Para cuando la idea validó, quieres algo con SEO técnico serio y la landing va a evolucionar (agregar testimonios, casos, secciones nuevas).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; como framework + GitHub Pages o Cloudflare Pages como hosting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por qué Astro&lt;/strong&gt;: genera HTML estático en build time, zero JS cliente innecesario, performance brutal (LCP&lt;br&gt;&lt;br&gt;
«Necesito el HTML completo de una landing page para validar una idea de negocio. La idea es: [DESCRIBÍ EN 2-3 FRASES]. Audiencia objetivo: [QUIÉN]. La landing debe incluir: hero con CTA principal, 3 secciones de beneficios, formulario de captura de email, footer simple. Estilo: moderno, minimalista, mobile-first. Devolveme un único archivo index.html con todo embedded: HTML, CSS y JS. Sin frameworks pesados (nada de React, solo HTML estático con JS vanilla). Optimizado para cargar en menos de 200ms.»&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo importante: pídele HTML único y estático. &lt;strong&gt;Si la IA te devuelve un proyecto con npm, package.json y carpetas, dile que NO&lt;/strong&gt;, quieres un solo &lt;code&gt;index.html&lt;/code&gt; con todo incluido. Eso es lo que GitHub Pages puede servir directo.&lt;/p&gt;

&lt;p&gt;Tip: si después de generar quieres ajustes, pégale un screenshot del resultado y dile &lt;em&gt;«esta parte de acá cambia esto»&lt;/em&gt;. Funciona mucho mejor que describir con palabras.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2: Crear repo público en GitHub (3 min)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Crear cuenta en github.com si no tienes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New repository → nombre tipo &lt;code&gt;landing-mi-idea&lt;/code&gt; → &lt;strong&gt;público&lt;/strong&gt; → Create&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click en «uploading an existing file» o «Add file → Create new file»&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nombre del archivo: &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pegar el HTML que te dio la IA&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Paso 3: Activar GitHub Pages (2 min)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;En el repo, ir a &lt;strong&gt;Settings → Pages&lt;/strong&gt; (sidebar izquierdo)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En «Source», elegir branch &lt;code&gt;main&lt;/code&gt; y carpeta &lt;code&gt;/ (root)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Esperar 1-2 minutos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;URL queda activa en: &lt;code&gt;https://tuusuario.github.io/landing-mi-idea/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ya tienes landing online, gratis, con SSL automático.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 4 (opcional pero recomendado): Conectar dominio personalizado vía Cloudflare (5 min)
&lt;/h3&gt;

&lt;p&gt;Esto agrega 5 minutos pero da credibilidad real (URL profesional vs &lt;code&gt;usuario.github.io/repo&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Si todavía no tienes un dominio, cómpralo (en Cloudflare Registrar son de los más baratos sin upsells: $9-12/año típico)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En tu DNS de Cloudflare, crear un &lt;strong&gt;CNAME record&lt;/strong&gt;: nombre &lt;code&gt;validar&lt;/code&gt; (o lo que quieras como subdominio) → destino &lt;code&gt;tuusuario.github.io&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;En GitHub, &lt;strong&gt;Settings → Pages → Custom domain&lt;/strong&gt;: pegar &lt;code&gt;validar.tudominio.com&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Esperar 5-15 minutos a que se genere el certificado SSL automáticamente&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ya tienes landing con dominio personalizado, SSL, gratis. Total invertido: ~$10/año del dominio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video tutorial paso a paso (Nivel 1 en vivo)
&lt;/h2&gt;

&lt;p&gt;Acá te dejo el tutorial completo en vivo donde lo hicimos con Rodrigo, levantando una landing real (&lt;code&gt;bananas.cristiantala.com&lt;/code&gt;) en 18 minutos. Verlo te ahorra mucho del trial-and-error del primer intento:&lt;/p&gt;

&lt;h2&gt;
  
  
  Casos reales en producción que puedes inspeccionar
&lt;/h2&gt;

&lt;p&gt;Acá están los 3 sitios que opero hoy con este stack —en distintos niveles— por si quieres ver qué se puede hacer:&lt;/p&gt;

&lt;h3&gt;
  
  
  Caso 1 — &lt;code&gt;lp.cristiantala.com&lt;/code&gt; (Nivel 2)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://lp.cristiantala.com" rel="noopener noreferrer"&gt;lp.cristiantala.com&lt;/a&gt; es el dominio donde hosteo todas mis landings de marketing: lead magnets, lanzamientos, cheatsheets descargables. Stack: Astro + Cloudflare Pages.&lt;/p&gt;

&lt;p&gt;Ejemplo concreto: &lt;a href="https://lp.cristiantala.com/linkedin-cheatsheets/" rel="noopener noreferrer"&gt;lp.cristiantala.com/linkedin-cheatsheets/&lt;/a&gt; es la landing del cheatsheet del benchmark IA mensual que distribuyo. Performance LCP  SEO &amp;gt; mantenibilidad &amp;gt; diseño, en ese orden) y usarlo como template para tu propio sitio agéntico.&lt;/p&gt;

&lt;p&gt;Lo que vale la pena copiar de ese repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;: cómo definir reglas duras de proyecto que el agente respeta&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;.claude/agents/&lt;/code&gt;: cómo modelar agentes custom para tareas repetibles&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;scripts/indexnow.sh&lt;/code&gt;: cómo notificar a buscadores cuando publicas contenido nuevo (clave para indexación rápida)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;scripts/validate-build.sh&lt;/code&gt;: validar antes de cada deploy&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Caso 3 — Tu primera landing (Nivel 1)
&lt;/h3&gt;

&lt;p&gt;Esta es la que vas a hacer si sigues el tutorial del video. Empieza simple, valida rápido, después escala si la idea funciona.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que SÍ necesita una landing de validación (no negociable)
&lt;/h2&gt;

&lt;p&gt;Una landing técnicamente perfecta pero que no captura datos no sirve para validar. Estos son los 4 elementos no negociables:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. CTA único y claro
&lt;/h3&gt;

&lt;p&gt;Una sola acción que el visitante debe hacer. Punto. No «compra Y suscribite Y compartí Y miranos en Instagram». Una acción.&lt;/p&gt;

&lt;p&gt;Para validación, el CTA típico es: capturar email para waitlist, o pre-orden con pago real (más fuerte como señal).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Captura de email funcional
&lt;/h3&gt;

&lt;p&gt;Conectar un formulario que efectivamente guarde el email en algún lado. Opciones gratis: Listmonk self-hosted, Tally + Google Sheets, ConvertKit free tier (hasta 1,000 subs), Brevo free tier (hasta 300 emails/día).&lt;/p&gt;

&lt;p&gt;El que uso yo: &lt;strong&gt;Listmonk&lt;/strong&gt; self-hosted. Costo cero, control total. Si recién empiezas y no quieres tocar servidores: Tally + Google Sheets es lo más simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tracking básico
&lt;/h3&gt;

&lt;p&gt;Saber cuántos visitantes recibís + dónde están + qué porcentaje convierte. Opciones gratis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloudflare Web Analytics&lt;/strong&gt; (gratis si ya estás en Cloudflare, lo más fácil)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Google Analytics 4&lt;/strong&gt; (gratis, completo pero pesado en privacy)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plausible&lt;/strong&gt; (gratis self-hosted, simple y privacy-friendly)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sin tracking no estás validando, estás adivinando.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Meta tags básicos para SEO/social
&lt;/h3&gt;

&lt;p&gt;Cuando alguien comparta tu landing en LinkedIn / WhatsApp / Twitter, quieres que se vea bien (Open Graph). Mínimo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; con la propuesta principal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;meta description&amp;gt;&lt;/code&gt; clara y atractiva&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;og:image&lt;/code&gt; con una imagen (1200×630 recomendado)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;og:title&lt;/code&gt; y &lt;code&gt;og:description&lt;/code&gt; para social shares&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pedile esto a la IA en el prompt original y te lo deja listo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Las 3 métricas que dicen «sí valida» vs «no valida»
&lt;/h2&gt;

&lt;p&gt;Después de 1-2 semanas con la landing live y tráfico inicial (mín 100-200 visitantes), mira:&lt;/p&gt;

&lt;h3&gt;
  
  
  Métrica 1: Conversion rate de visitante a email
&lt;/h3&gt;

&lt;p&gt;Benchmark realista:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5%&lt;/strong&gt;: señal fuerte&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Métrica 2: Calidad de los emails capturados
&lt;/h3&gt;

&lt;p&gt;¿Son personas reales con perfil de tu cliente target? Si capturas 200 emails pero el 80% son founders mirando «cómo lo hizo este» en vez de tu cliente target, no validaste demanda real.&lt;/p&gt;

&lt;h3&gt;
  
  
  Métrica 3: Pre-órdenes o «yo pago ya»
&lt;/h3&gt;

&lt;p&gt;La más fuerte. Si en el CTA pedís pre-pago o señal con pago, cada conversión vale 10× una captura de email. Conversion rate baja a 0.5-2%, pero cada uno es señal sólida.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los 3 errores más comunes que veo en landings de validación
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tráfico cero con expectativa de validar.&lt;/strong&gt; La landing perfecta sin tráfico no valida nada. Mínimo: $50-100 en Twitter/LinkedIn ads o tráfico orgánico de tu red, para tener 100-200 visitantes mínimo antes de sacar conclusiones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CTA confuso o múltiple.&lt;/strong&gt; «Suscríbete o agendá demo o miranos en redes» mata el conversion rate. Una acción.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No iterar.&lt;/strong&gt; Si después de 200 visitantes tienes 1% conversion, no esperes a 1000 visitantes para cambiar. Iterá hero, copy, propuesta. La landing es un experimento, no un monumento.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cuándo subir de Nivel 1 a Nivel 2 o 3
&lt;/h2&gt;

&lt;p&gt;No subas de nivel antes de tiempo. Las señales claras para graduar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;De Nivel 1 a Nivel 2&lt;/strong&gt; (HTML simple → Astro):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;La idea ya validó (&amp;gt;3% conversion sostenido)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vas a invertir tiempo en hacer la landing «definitiva»&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Necesitás múltiples páginas (about, pricing, casos, blog)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SEO empieza a importarte como canal de adquisición&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;De Nivel 2 a Nivel 3&lt;/strong&gt; (Astro manual → Astro agéntico):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Publicás contenido recurrentemente (semanal, quincenal)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Estás copiando-pegando setups entre páginas&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;El 70% del trabajo de «agregar contenido» es repetitivo&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Querés que un agente se encargue de la metadata SEO y validaciones&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si todavía no validaste la idea, &lt;strong&gt;mantente en Nivel 1&lt;/strong&gt;. Subir de nivel antes es over-engineering y consume tiempo que necesitas para hablar con tus primeros clientes.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Y ahora qué?
&lt;/h2&gt;

&lt;p&gt;Si seguiste los pasos del Nivel 1, ya tienes tu primera landing online por $0 (o ~$10/año si conectaste un dominio). Si quieres ver cómo se ve esto cuando escala, te dejé los 2 sitios reales arriba —incluyendo el repo público de ELHDA que puedes clonar—.&lt;/p&gt;

&lt;p&gt;El siguiente paso es &lt;strong&gt;traerle tráfico real y medir&lt;/strong&gt;. Eso es la parte que requiere más arte que técnica.&lt;/p&gt;

&lt;p&gt;Dentro de &lt;a href="https://www.skool.com/cagala-aprende-repite/about?ref=blog-landing&amp;amp;utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=cluster-founder-ia&amp;amp;utm_content=cta-fin" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt; tenemos founders compartiendo casos reales de validación: landings que funcionaron, landings que fallaron y qué iteraciones llevaron al «sí valida». Si estás en fase de validación, esa data te ahorra meses de trial-and-error solo.&lt;/p&gt;

&lt;p&gt;Entrás gratis, descargás el template HTML como recurso de bienvenida, y si te suma el resto te quedás.&lt;/p&gt;

&lt;p&gt;— Cristian&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Cuánto cuesta crear una landing page gratis con GitHub Pages?
&lt;/h3&gt;

&lt;p&gt;Cero pesos si usas un subdominio de GitHub (&lt;code&gt;tuusuario.github.io/turepo&lt;/code&gt;). Si conectas un dominio personalizado, solo pagas el dominio (típico $9-12/año en Cloudflare Registrar). El hosting + SSL + ancho de banda son gratis. Para sitios con tráfico moderado (decenas de miles de visitas/mes) sigue siendo gratis.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Astro o HTML simple para una landing?
&lt;/h3&gt;

&lt;p&gt;Depende de la fase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HTML simple&lt;/strong&gt;: validación cero-a-uno. Una sola página, copy estático. 18 min y listo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Astro&lt;/strong&gt;: post-validación o sitios que evolucionan. Mejor performance, mejor SEO, más mantenible si vas a agregar páginas. Requiere 2-4h de setup inicial.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si recién empiezas: HTML simple. Si ya validaste o el sitio va a crecer: Astro.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿GitHub Pages o Cloudflare Pages: cuál usar?
&lt;/h3&gt;

&lt;p&gt;Para empezar y validar: &lt;strong&gt;GitHub Pages&lt;/strong&gt;. Es más simple de configurar, todo en una plataforma.&lt;/p&gt;

&lt;p&gt;Para producción seria, especialmente con Astro: &lt;strong&gt;Cloudflare Pages&lt;/strong&gt;. Performance superior (CDN global más rápido), mejor analytics nativo, integración directa con DNS Cloudflare. Lo que uso yo en &lt;code&gt;lp.cristiantala.com&lt;/code&gt; y &lt;code&gt;eslahoradeaprender.com&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Necesito saber programar para crear una landing con IA + GitHub Pages?
&lt;/h3&gt;

&lt;p&gt;No para el Nivel 1. Pedile a Gemini, Claude o ChatGPT el HTML completo. Después es solo copy-paste a GitHub. Lo único técnico es activar Pages en Settings, que son 3 clicks. Si nunca tocaste GitHub, el primer intento te toma 30-45 min. El segundo, 10 min.&lt;/p&gt;

&lt;p&gt;Para Nivel 2 (Astro) sí ayuda saber lo básico de cómo correr &lt;code&gt;npm install&lt;/code&gt; y &lt;code&gt;npm run build&lt;/code&gt;. Para Nivel 3 (agéntico) ayuda haber usado Claude Code antes.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué es un sistema «agéntico» para mantener un sitio?
&lt;/h3&gt;

&lt;p&gt;Un sistema donde uno o más agentes IA (típicamente Claude Code con prompts custom) se encargan de tareas repetitivas: agregar contenido nuevo, generar metadata SEO, validar builds, notificar a buscadores. El humano define las reglas (en archivos como &lt;code&gt;CLAUDE.md&lt;/code&gt;) y el agente las ejecuta.&lt;/p&gt;

&lt;p&gt;Caso real público: &lt;a href="https://github.com/ctala/landing-es-la-hora-de-aprender" rel="noopener noreferrer"&gt;github.com/ctala/landing-es-la-hora-de-aprender&lt;/a&gt; — el sitio del podcast Es La Hora de Aprender, donde agregar un episodio nuevo es 1 comando que el agente ejecuta de punta a punta.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Puedo conectar un dominio que ya tengo a GitHub Pages?
&lt;/h3&gt;

&lt;p&gt;Sí. En tu DNS, agregas un CNAME que apunte a &lt;code&gt;tuusuario.github.io&lt;/code&gt;, después en Settings → Pages → Custom Domain pones tu dominio. SSL automático. Demora 5-15 min en propagar. Funciona igual con Cloudflare DNS si tienes el dominio ahí.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Para qué NO sirve este stack (GitHub Pages / Astro)?
&lt;/h3&gt;

&lt;p&gt;Para sitios con backend (procesar pagos directo, base de datos, autenticación de usuarios), e-commerce complejo, o aplicaciones SaaS. Para todo eso necesitas server real (Vercel, Railway, AWS, etc.). Para landing pages, blogs, sitios de podcast, sitios de producto estáticos, es ideal.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué herramientas uso para email capture y tracking?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Email capture&lt;/strong&gt;: Listmonk (self-hosted, gratis), Tally + Google Sheets (sin backend), ConvertKit free tier (hasta 1,000 subs), Brevo free tier (300 emails/día).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tracking&lt;/strong&gt;: Cloudflare Web Analytics (gratis si estás en CF), Google Analytics 4 (gratis pero pesado), Plausible (privacy-friendly).&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/landing-page-gratis-validar-idea-emprendedor/" rel="noopener noreferrer"&gt;Cómo crear una landing page gratis para validar tu idea (con video tutorial y casos reales)&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/landing-page-gratis-validar-idea-emprendedor/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ia</category>
      <category>startup</category>
    </item>
    <item>
      <title>El verdadero gap de la IA en LATAM no es la tecnología</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Mon, 11 May 2026 19:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/el-verdadero-gap-de-la-ia-en-latam-no-es-la-tecnologia-47pk</link>
      <guid>https://dev.to/cristiantalasanchez/el-verdadero-gap-de-la-ia-en-latam-no-es-la-tecnologia-47pk</guid>
      <description>&lt;p&gt;&lt;strong&gt;67%&lt;/strong&gt; de las grandes empresas de LATAM tienen al menos un proyecto de IA en producción. Solo &lt;strong&gt;23%&lt;/strong&gt; reporta impacto medible en métricas de negocio.&lt;/p&gt;

&lt;p&gt;Esa brecha de 44 puntos es el verdadero estado de la IA empresarial en la región. No es un problema de tecnología — el mercado tiene Claude, GPT, Gemini, MiniMax, modelos open source corriendo en cualquier laptop decente. Es un problema de ejecución, calidad de datos y decisiones que se toman antes de elegir un modelo.&lt;/p&gt;

&lt;h2&gt;
  
  
  El número que nadie quiere mirar
&lt;/h2&gt;

&lt;p&gt;Tres datos definen el momento:&lt;/p&gt;

&lt;p&gt;El primer número se lee bonito en conferencias. El segundo es el que importa. El tercero es la señal de hacia dónde va la siguiente ola.&lt;/p&gt;

&lt;p&gt;Brasil concentra la inversión empresarial más alta: las grandes corporaciones gastan en promedio &lt;strong&gt;R$77.7M anuales&lt;/strong&gt; en AI, con un ROI actual del 16% que esperan llevar al 31% para 2027 (SAP + Oxford Economics). En Nubank el AI ya está dentro del credit underwriting; PicPay, PagSeguro y Creditas tienen agentes de fraude y compliance corriendo todos los días. En fintech, el ROI promedio del primer año en sistemas de credit scoring y fraud detection con AI es de &lt;strong&gt;3.2×&lt;/strong&gt;. Eso es producción real, no slide deck.&lt;/p&gt;

&lt;p&gt;Pero esos casos son la minoría. La mayoría sigue atrapada en pilotos.&lt;/p&gt;

&lt;h2&gt;
  
  
  El gap no es la tecnología — es la ejecución
&lt;/h2&gt;

&lt;p&gt;Cuando le pregunto a founders y CTOs por qué su piloto de IA no se escaló, las respuestas se repiten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;«Los datos están sucios y fragmentados.»&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;«No teníamos a alguien que entendiera cuándo el modelo se equivocaba.»&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;«El costo de mantener el agente subió cuando el proveedor cambió las reglas.»&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;«Empezamos con OpenAI, después Claude, después no sabíamos cuál era el dueño del workflow.»&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ninguna de esas respuestas habla del modelo. Hablan de &lt;strong&gt;gobernanza del flujo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tres cosas determinan si un proyecto de IA llega a producción con impacto medible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Calidad y disponibilidad del dato.&lt;/strong&gt; Sin esto, ningún modelo te salva. El 80% del costo de un proyecto productivo es preparar el dato.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Métrica clara que defienda el caso de uso.&lt;/strong&gt; Si no podés decir qué KPI mueve el agente, no debería estar en el P&amp;amp;L.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Independencia del proveedor.&lt;/strong&gt; El día que el proveedor te cambia el precio o saca una feature del plan, tu unit economics se rompe — y eso no es hipotético.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El último punto es donde el 38% que está migrando a open source está jugando distinto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué 38% ya está en open source
&lt;/h2&gt;

&lt;p&gt;En abril 2026 Anthropic sacó silenciosamente a Claude Code del plan Pro de $20. Lo restauraron 24 horas después por presión pública, pero el experimento existió: la pricing page completa decía X, no un test del 2% como después intentaron explicar. Amol Avasare (Head of Growth) tuvo que admitirlo en X.&lt;/p&gt;

&lt;p&gt;Ese día quedó claro algo que las empresas con stack robusto ya sabían: &lt;strong&gt;un proveedor, un punto de falla&lt;/strong&gt;. Y no importa que tu suscripción cueste $20 o $100 — el riesgo no es el costo, es que las reglas pueden cambiar un martes cualquiera.&lt;/p&gt;

&lt;p&gt;El 38% que migró parcial o totalmente a AI open source no es por ideología — es por unit economics. Modelos como Llama, Qwen, DeepSeek, Mistral corren localmente, no dependen de un dashboard externo, y la cuota la define tu hardware, no el contrato.&lt;/p&gt;

&lt;p&gt;Mi setup personal lo refleja: corro &lt;strong&gt;MiniMax M2.7 highspeed&lt;/strong&gt; ($40/mes, cuota infinita en uso real) en paralelo a Claude Code, con Ollama Cloud para producción y una NVIDIA DGX Spark local para correr Qwen 3.6 cuando la privacidad o el costo es crítico. No es por hobby — es porque el día que cualquiera de esos proveedores mueva el queso, el resto del stack sigue funcionando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo se ve un proyecto que sí llega a producción
&lt;/h2&gt;

&lt;p&gt;Hay un patrón común en los casos que llegan al 23% con impacto medible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vertical bien definido.&lt;/strong&gt; No «vamos a usar IA»; sí «vamos a automatizar el scoring de microcréditos con datos transaccionales + telco». Ámbito acotado, métrica clara.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data pipeline antes que modelo.&lt;/strong&gt; Limpieza, enriquecimiento, governance. El modelo viene después.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-modelo desde el día 1.&lt;/strong&gt; Un primario, un secundario, un fallback open source. Cero proveedor exclusivo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Métrica de negocio, no técnica.&lt;/strong&gt; No «accuracy del 92%»; sí «reducción de fraude en X% sostenida tres meses».&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Humano en el loop al principio.&lt;/strong&gt; Aprobación, corrección, retroalimentación que mejora el agente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Costos medidos por unidad de negocio.&lt;/strong&gt; No «$200/mes en API»; sí «$0.03 por transacción procesada».&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JPMorgan (que no es LATAM pero es el benchmark que cualquier banco regional compara) lo hace exactamente así: $17.5B de presupuesto tecnológico anual, 450+ casos de uso en producción, 200,000 empleados usando su LLM Suite a diario. La meta declarada es $2.5B de valor anual de AI. Nadie llega ahí «probando OpenAI».&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que viene en LATAM Q3-Q4 2026
&lt;/h2&gt;

&lt;p&gt;Tres movimientos a observar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Verticales reguladas migran a open source.&lt;/strong&gt; Fintech y healthcare van a forzar setups híbridos por compliance — open source local + APIs externas solo donde la regulación lo permite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;El presupuesto AI deja de ser «proyecto» y pasa a «capacidad continua».&lt;/strong&gt; Las empresas que lo traten como CapEx (gasto único) se quedarán atrás. Las que lo traten como OpEx con métricas mensuales van a capitalizar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;El gap de talento se cierra con templates probados.&lt;/strong&gt; No con frameworks teóricos — con repositorios open source que muestren el código real de cómo un agente productivo está armado.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El 23% que mide impacto va a crecer. La pregunta es si vas a ser parte de ese 23% o seguir en el 44% que adopta sin medir.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/el-verdadero-gap-de-la-ia-en-latam-no-es-la-tecnologia/" rel="noopener noreferrer"&gt;El verdadero gap de la IA en LATAM no es la tecnología&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/el-verdadero-gap-de-la-ia-en-latam-no-es-la-tecnologia/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ia</category>
    </item>
    <item>
      <title>Cómo construí una comunidad de founders sin sentirme un estafador</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Mon, 11 May 2026 16:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/como-construi-una-comunidad-de-founders-sin-sentirme-un-estafador-g1g</link>
      <guid>https://dev.to/cristiantalasanchez/como-construi-una-comunidad-de-founders-sin-sentirme-un-estafador-g1g</guid>
      <description>&lt;p&gt;&lt;em&gt;Construir una **comunidad para emprendedores con IA&lt;/em&gt;* y monetizarla siempre me generó la misma tensión: cobrarle a quien recién empieza se siente horrible, y cobrarle al que ya puede pagar no me molesta. Después de cinco años, encontré el sistema que resuelve esa tensión. Hoy clarifiqué cómo funciona, para mí y para todos los que están dentro.*&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema que arrastré 5 años: ¿cómo cobrar una mentoría sin sentirme impostor?
&lt;/h2&gt;

&lt;p&gt;Llevo cinco años pensando cómo apoyar a otros founders y emprendedores sin sentirme un estafador.&lt;/p&gt;

&lt;p&gt;No es una frase de marketing. Es literal. Cada vez que alguien me preguntaba &lt;em&gt;cuánto te cobro por una sesión&lt;/em&gt;, sentía un nudo. No por el monto. Por la pregunta de fondo: ¿le estoy cobrando a alguien que todavía no puede pagarme, o a alguien que ya puede y para quien esto no significa nada?&lt;/p&gt;

&lt;p&gt;Cobrarle a quien todavía no puede pagarte se siente horrible. A quien ya puede pagar, nunca me molestó. El problema es que la mayoría de los formatos clásicos —mentorías 1:1, cursos cerrados con pricing único, programas pagados— no distinguen entre los dos. Le cobran lo mismo al founder que ya facturó $1M ARR que al emprendedor que está validando una idea en una hoja de Notion.&lt;/p&gt;

&lt;p&gt;Encontrar ese equilibrio me tomó años. Hoy lo encontré.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Comunidad pagada o gratuita? El reset que cambió todo
&lt;/h2&gt;

&lt;p&gt;Hace cuatro o cinco meses dejé de pensar en CAR (&lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt;) como «comunidad pagada» o «comunidad gratuita». Esa dicotomía es justo el problema.&lt;/p&gt;

&lt;p&gt;Empecé a pensarla como una &lt;strong&gt;comunidad para emprendedores con un sistema de progresión&lt;/strong&gt;. Como un videojuego, pero para emprendimiento.&lt;/p&gt;

&lt;p&gt;La idea es vieja —el modelo freemium con gamification existe hace años en Skool, Discord, Reddit—. Lo nuevo, al menos para mí, fue darme cuenta de que el sistema de progresión podía resolver exactamente esa tensión que arrastraba:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Los que recién empiezan, entran gratis y desbloquean conocimiento &lt;strong&gt;aportando&lt;/strong&gt; —comentando, posteando, ayudando a otros, participando en eventos—. No pagan nada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Los que ya pueden pagar y quieren ir más profundo —tiempo real conmigo, eventos en vivo, asesorías grabadas, biblioteca premium— pagan. Y ese pago no compra el conocimiento (el conocimiento ya está adentro). Compra &lt;strong&gt;mi tiempo&lt;/strong&gt; y los recursos curados que uso a diario para correr mis empresas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es la misma comunidad. Es el mismo conocimiento. Lo que cambia es la velocidad y la profundidad del acceso, según en qué punto del journey estés.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué una comunidad para emprendedores con IA tiene sentido en 2026
&lt;/h2&gt;

&lt;p&gt;Hay una segunda razón por la que recién ahora se materializó este modelo: la forma de emprender ya cambió.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Emprender en 2026 sin apalancar IA es como hacerlo en 2010 sin internet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No es una opinión. Es una realidad operativa que vivo cada día corriendo &lt;a href="https://ecosistemastartup.com" rel="noopener noreferrer"&gt;Ecosistema Startup&lt;/a&gt; (200K visitas/mes &lt;a href="https://cristiantala.com/como-automatice-1000-ctas-en-mi-blog-sin-escribir-una-linea-de-codigo/" rel="noopener noreferrer"&gt;con un equipo de 1 persona + IA&lt;/a&gt;) y la comunidad de CAR.&lt;/p&gt;

&lt;p&gt;Hoy un founder puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cristiantala.com/mvp-sin-programar-2026-guia-completa/" rel="noopener noreferrer"&gt;Validar una landing en 2 horas&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Automatizar customer support con &lt;a href="https://cristiantala.com/openclaw-n8n-automatizacion-agentes-ia/" rel="noopener noreferrer"&gt;un agente IA en producción&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Producir contenido sin contratar a nadie&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cristiantala.com/2026-mi-ano-sin-bullshit/" rel="noopener noreferrer"&gt;Operar una empresa con un equipo mínimo&lt;/a&gt; sin sacrificar la calidad de lo que sale&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La pregunta ya no es &lt;strong&gt;si&lt;/strong&gt; se usa IA. Es &lt;strong&gt;cómo&lt;/strong&gt;. Y la respuesta no la encuentras leyendo papers ni en cursos de gurús que nunca operaron una empresa. La encuentras en una comunidad donde otros founders están aplicando esto en producción, compartiendo qué funciona y qué no, sin filtro.&lt;/p&gt;

&lt;p&gt;El stack que uso para operar Ecosistema Startup y la comunidad CAR no es secreto: n8n para automatizaciones, agentes IA con Claude/Qwen para contenido y soporte, OpenClaw como mano derecha, NocoDB como fuente de verdad. Esto es lo que enseño dentro de la comunidad — no como teoría, como playbooks que uso hoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué Skool y no Circle, Teachable, Hotmart o Discord?
&lt;/h2&gt;

&lt;p&gt;Antes de quedarme con &lt;a href="https://www.skool.com/signup?ref=114150f098fc40ba9b365fa78be01a63" rel="noopener noreferrer"&gt;Skool&lt;/a&gt; probé varias plataformas. Vale la pena contar qué pasó con cada una, porque la pregunta «qué plataforma uso para mi comunidad» la tengo seguido en el WhatsApp y la respuesta no es obvia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teachable.&lt;/strong&gt; Es buenísimo como LMS para vender cursos, pero no es una comunidad. Es un repositorio de videos con foro adjunto. Si tu producto es «el curso», funciona. Si tu producto es «la gente que entra al curso», no. Para CAR necesitaba la comunidad como protagonista, no el curso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hotmart.&lt;/strong&gt; Plataforma de pago + cursos muy fuerte en LATAM, pero mi experiencia fue paupérrima — UI sobrecargada, soporte mediocre, fees altos, y la comunidad como tal es accesoria. El golpe final fue que &lt;strong&gt;me debían dinero y me aburrí de pedirlo&lt;/strong&gt;. Si vas a confiar en una plataforma para manejar tu monetización, lo mínimo no negociable es que te paguen lo que generaste, cuando corresponde. Funciona si tu modelo es vender infoproductos individuales con afiliados y tienes paciencia infinita para reclamos. No funciona si tu modelo es comunidad recurrente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Circle.&lt;/strong&gt; Acá la cosa fue interesante. Circle me gustó genuinamente — UI limpia, features potentes (DMs, eventos, cursos integrados, segmentación), branding propio. Pero &lt;strong&gt;las personas no interactuaban como deberían&lt;/strong&gt;. La fricción del onboarding (cuenta nueva, app aparte, no hay efecto red) hacía que entraran, miraran y se fueran. El engagement nunca despegó. Para alguien que recién está construyendo audiencia, ese costo de adopción mata el sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discord.&lt;/strong&gt; Excelente para chat en tiempo real, voice channels y comunidades de gaming/dev. Pero para una &lt;strong&gt;comunidad de emprendedores con sistema de progresión&lt;/strong&gt;, falla en tres cosas: 1) la gamification nativa es básica (sin niveles, sin desbloqueo de contenido), 2) los cursos hay que hostearlos afuera y romper el flujo, 3) el ruido del chat constante mata el deep work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skool gana por dos razones contraintuitivas.&lt;/strong&gt; Una es que &lt;strong&gt;tiene pocas funcionalidades&lt;/strong&gt; —comparado con Circle es casi austero— y eso es exactamente lo que la hace simple para gente no técnica. La curva de aprendizaje es cero: feed, cursos, eventos, classroom. Punto. Sin paneles avanzados, sin segmentaciones complicadas, sin features que nadie usa. La otra es &lt;strong&gt;network effect&lt;/strong&gt;: hay buena probabilidad de que la persona que invitás a CAR ya tenga cuenta en Skool porque pertenece a otra comunidad (ej. SchoolOfMentors, Imperio, Agentic Architects). Eso reduce la fricción del onboarding a casi cero. Y la gamificación nativa (niveles, puntos, leaderboard que premian aportar) más el &lt;a href="https://cristiantala.com/automatizar-skool-onboarding-n8n-apify-138-miembros-perdidos/" rel="noopener noreferrer"&gt;transaction fee 2.9%&lt;/a&gt; vs 14% Patreon, terminan de cerrar la decisión.&lt;/p&gt;

&lt;p&gt;En resumen: si tu modelo es freemium con progresión por niveles y cursos desbloqueables, Skool gana. Si tu valor principal es chat en vivo permanente, Discord. Si quieres customización máxima y tu audiencia ya está adentro de tu marca, Circle. Si tu producto es el curso individual y no la comunidad, Teachable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo funciona el modelo freemium con gamification en mi comunidad de Skool
&lt;/h2&gt;

&lt;p&gt;Para que no quede en abstracto, así funciona hoy la comunidad de CAR:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Si entras gratis&lt;/strong&gt;, tienes acceso al feed, a la mayoría de eventos comunitarios y a los cursos del journey de founder (validación de ideas, pricing, marca personal, n8n, agentes IA, fundraising, postular a fondos públicos). Cada curso se desbloquea al subir de nivel &lt;strong&gt;aportando&lt;/strong&gt; a la comunidad. Si comentas, posteas, ayudas a otros — desbloqueas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Si quieres ir más profundo&lt;/strong&gt;, hay dos tiers de pago: Premium y VIP.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Premium&lt;/strong&gt; te da acceso inmediato a todos los cursos sin esperar niveles, el Cofre del Pirata completo (la biblioteca con prompts, workflows n8n, AGENTS.md templates, plantillas, cheatsheets y playbooks que uso a diario para correr mis empresas), y eventos quincenales en vivo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VIP&lt;/strong&gt; suma lo que Premium no incluye: WhatsApp directo conmigo, Cafecitos mensuales en grupo cerrado de 8 founders, LinkedIn Posting Party, Roast My Pitch, y acceso a asesorías grabadas con casos reales.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El pricing actual lo encuentras en la página de la comunidad —cambia cuando se justifica, así que no lo cierro acá—. Cuando lanzamos un tier nuevo o subimos el pricing, los founders que ya están adentro mantienen el suyo. No buscamos retroactivos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué publico cómo construir una comunidad de founders hispanohablantes
&lt;/h2&gt;

&lt;p&gt;Hoy clarifiqué cómo funciona el sistema —para mí mismo, para los miembros que llevan tiempo y para los que vienen entrando—. Cerramos meses de trabajo aclarando reglas, curando contenido, construyendo el Cofre del Pirata (que pasó de 35 piezas a 69 en dos semanas), y validando el modelo con los miembros activos.&lt;/p&gt;

&lt;p&gt;Ya somos más de 500 founders hispanohablantes operando con IA. Comunidad pequeña, con calidad arriba —o al menos eso intentamos—. La forma de crecer bien para este tipo de proyecto no es por anuncios pagados. Es de boca en boca, como cuando &lt;a href="https://cristiantala.com/como-las-comunidades-y-la-accion-cierran-las-brechas-del-emprendimiento-en-latinoamerica/" rel="noopener noreferrer"&gt;las comunidades cierran brechas del emprendimiento en LATAM&lt;/a&gt;. Founder a founder. Emprendedor a emprendedor.&lt;/p&gt;

&lt;p&gt;Si esto te suma, &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;entrá gratis a CAR acá&lt;/a&gt;. Si conoces a otros founders o emprendedores hispanohablantes que están emprendiendo con IA, mándales el link. Eso me ayuda más que cualquier anuncio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preguntas frecuentes sobre comunidades para emprendedores con IA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Qué es Cágala, Aprende, Repite (CAR)?
&lt;/h3&gt;

&lt;p&gt;Es una &lt;strong&gt;comunidad para emprendedores con IA&lt;/strong&gt; hispanohablantes que operan o quieren operar sus empresas apalancando inteligencia artificial. Funciona sobre Skool con un sistema de progresión: entras gratis y desbloqueas cursos aportando a la comunidad (no pagando).&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo funciona el sistema gratuito?
&lt;/h3&gt;

&lt;p&gt;Comentas, posteas o ayudas a otros en el feed. Acumulas puntos. Al subir de nivel se desbloquean los cursos del journey de founder (&lt;a href="https://cristiantala.com/que-es-emprender-la-guia-definitiva-para-dar-tus-primeros-pasos/" rel="noopener noreferrer"&gt;validación de ideas&lt;/a&gt;, pricing, n8n, agentes IA, fundraising, postular a fondos públicos). Sin tarjeta, sin trial trampa, sin paywall escondido.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Hay tiers de pago?
&lt;/h3&gt;

&lt;p&gt;Sí, dos: Premium y VIP. No son para acceder al conocimiento (ese está disponible aportando). Son para acceso inmediato sin esperar niveles, recursos curados (el Cofre del Pirata) y tiempo real conmigo en eventos en vivo. El pricing actual está en la página de la comunidad —puede cambiar, y no quiero estar editando este post cada vez que lo movemos—.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿En qué se diferencia VIP de Premium?
&lt;/h3&gt;

&lt;p&gt;Premium te da acceso completo a cursos + Cofre del Pirata + eventos quincenales. VIP suma tiempo 1:1 y grupal: WhatsApp directo conmigo, Cafecitos mensuales en grupo cerrado de 8 founders, LinkedIn Posting Party, Roast My Pitch, y asesorías grabadas con casos reales. Es para founders que ya están operando y quieren tiempo real con un founder con exit.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué pasa si ya soy miembro pago?
&lt;/h3&gt;

&lt;p&gt;Tu pricing original se mantiene. Cuando el pricing público sube, los que ya están adentro siguen con el suyo. No buscamos retroactivos. Si querés mantenerte al día con cómo evoluciona el sistema, podés &lt;a href="https://cristiantala.com/newsletter/" rel="noopener noreferrer"&gt;suscribirte al newsletter Navegando Sin Un Mapa&lt;/a&gt; donde escribo cada lunes sobre cómo opero esto en vivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué es Skool y para qué sirve?
&lt;/h3&gt;

&lt;p&gt;Skool es una plataforma fundada por Sam Ovens que combina foros, cursos, eventos en vivo y gamification en un solo lugar. Sirve para crear comunidades online monetizables con baja comisión por transacción (2.9% vs 14% Patreon). En español hay comunidades activas como CAR, Emprendedores.com, Líderes Skool y Valida Tu Startup.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Skool, Circle, Teachable o Discord: cuál elegir para una comunidad de emprendedores?
&lt;/h3&gt;

&lt;p&gt;Depende del producto. Si tu modelo es freemium con progresión por niveles y cursos desbloqueables: Skool (gana por simplicidad + efecto red — la gente ya tiene cuenta). Si quieres customización máxima y branding propio: Circle (gran UI pero más fricción de adopción). Si tu producto es el curso individual y no la comunidad: Teachable. Si tu valor principal es chat en vivo permanente: Discord. Hotmart es mejor evitarlo para comunidad — funciona como marketplace de cursos individuales.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cuánto cobrar por una mentoría sin sentirse impostor?
&lt;/h3&gt;

&lt;p&gt;El framework que uso: no cobres por compartir conocimiento (eso está disponible aportando a la comunidad). Cobra por tu tiempo (sesiones 1:1, eventos en vivo) y por recursos curados (plantillas, workflows, playbooks). Si la mentoría es 1:1 y tu experiencia operacional es real, $100-300/hora es defendible. Si solo tienes teoría, no cobres todavía.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo funciona el modelo freemium para una comunidad online?
&lt;/h3&gt;

&lt;p&gt;El modelo freemium ofrece acceso básico gratuito y reserva funcionalidades avanzadas para usuarios pagos. En una comunidad funciona si: 1) el tier gratuito entrega valor real (no demo), 2) el tier pago compra algo que no escala (tiempo del founder, recursos curados), 3) la conversión es por afinidad cultural, no por paywall agresivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Por qué cobrarle a un emprendedor que recién empieza se siente mal?
&lt;/h3&gt;

&lt;p&gt;Porque le estás pidiendo capital escaso a alguien que aún no facturó. La solución no es regalar todo (insostenible), es separar conocimiento (puede ser gratuito y desbloqueable por aporte) de tiempo del founder (cobrable sin culpa). Es el principio Cliefnotes-style: 80% del valor accesible gratis, 20% premium para quienes ya están operando.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué diferencia hay entre una comunidad para emprendedores y una comunidad para founders?
&lt;/h3&gt;

&lt;p&gt;En español la línea es difusa: «emprendedor» abarca desde freelancer hasta CEO con ronda Series A. «Founder» suele acotarse a quien fundó una empresa con tracción o ambición de scaleup. Mi comunidad usa «founder hispanohablante» para señalar el perfil: gente que está operando un proyecto propio, no estudiando emprendimiento como hobby.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Se puede emprender en 2026 sin saber de IA?
&lt;/h3&gt;

&lt;p&gt;Sí, pero competirías en desventaja. Emprender en 2026 sin apalancar IA es como hacerlo en 2010 sin internet — no imposible, pero el costo de oportunidad es alto. Un founder con IA puede validar landings en horas, automatizar soporte, producir contenido sin equipo y operar una empresa con un equipo mínimo. Los que no la apalancan terminan compitiendo contra equipos de 10 personas siendo 1.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo elegir entre comunidad gratis o de pago al empezar a emprender?
&lt;/h3&gt;

&lt;p&gt;Si estás validando idea: comunidad gratis con sistema de progresión (Skool, Reddit, Discord). Si ya facturas y quieres profundizar: comunidad de pago con tiempo real del founder + recursos curados. La señal de que es momento de pagar: ya tienes preguntas específicas de operación que no aparecen en buscador, y necesitas alguien con experiencia operacional real (no teoría).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.D.&lt;/strong&gt; — Si llegaste hasta acá y esto te resonó: el mejor regalo que me puedes hacer no es comprarme nada. Es compartir esta publicación —o el link a la &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;comunidad&lt;/a&gt;— con algún founder o emprendedor hispanohablante que creas que le puede sumar. Eso es lo que mueve la aguja para un proyecto que no se construye con anuncios.&lt;/p&gt;

&lt;p&gt;— Cristian&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/comunidad-para-emprendedores-con-ia/" rel="noopener noreferrer"&gt;Cómo construí una comunidad de founders sin sentirme un estafador&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/comunidad-para-emprendedores-con-ia/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ia</category>
      <category>startup</category>
    </item>
    <item>
      <title>La guerra de IA se terminó. Y sí, alguien ganó — pero eso no es lo importante</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Sat, 09 May 2026 15:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/la-guerra-de-ia-se-termino-y-si-alguien-gano-pero-eso-no-es-lo-importante-12mh</link>
      <guid>https://dev.to/cristiantalasanchez/la-guerra-de-ia-se-termino-y-si-alguien-gano-pero-eso-no-es-lo-importante-12mh</guid>
      <description>&lt;p&gt;Hace dos años, si me hubieran dicho que una empresa de 500 personas iba a valer $900 mil millones de dólares, me habría reído.&lt;/p&gt;

&lt;p&gt;No porque sea imposible — en tech hemos visto valuaciones absurdas — sino porque esa empresa estaba &lt;em&gt;detrás&lt;/em&gt; de OpenAI en casi todo: en usuarios, en brand, en ecosistema.&lt;/p&gt;

&lt;p&gt;Hoy, Anthropic está cerrando una ronda a $900B. OpenAI está a $852B. Y lo que pasó en el medio es un caso de estudio en lo que realmente determina quién gana en tecnología cuando la infraestructura se commoditiza.&lt;/p&gt;

&lt;p&gt;No es el que llega primero. No es el que tiene más dinero. Es el que resuelve un problema que el mercado necesita urgentemente — y lo hace mejor que nadie.&lt;/p&gt;

&lt;p&gt;Pero antes de llegar a la conclusión, vamos a lo que realmente importa para ti que estás leyendo esto: &lt;strong&gt;qué diablos significa para tu próxima decisión.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  La historia que nadie cuenta bien
&lt;/h2&gt;

&lt;p&gt;Bloomberg, TechCrunch y The Next Web &lt;a href="https://techcrunch.com/2026/04/29/sources-anthropic-could-raise-a-new-50b-round-at-a-valuation-of-900b/" rel="noopener noreferrer"&gt;reportearon en abril-mayo 2026&lt;/a&gt; que Anthropic está en conversaciones para levantar $40-50 mil millones a una valoración de $850-900 mil millones. Eso representa más del doble de su valoración de febrero 2026, cuando levantó $30 mil millones a $380B.&lt;/p&gt;

&lt;p&gt;La ronda aún no está cerrada. Anthropic no ha commentado. Pero los números de revenue cuentan una historia que hace que esta valuación, aunque parezca loca, tenga sentido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic llegó a $30 mil millones de ARR en abril de 2026&lt;/strong&gt;, según &lt;a href="https://thenextweb.com/news/google-40-billion-anthropic-investment-gemini" rel="noopener noreferrer"&gt;Bloomberg via The Next Web&lt;/a&gt;. Eso es crecimiento de $1B en enero 2025 a $30B en 15 meses. &lt;strong&gt;El crecimiento más rápido en la historia de una empresa de tecnología en Estados Unidos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No es un KPI inventado. Es revenue real de empresas reales pagando licencias empresariales de seis y siete dígitos anuales.&lt;/p&gt;

&lt;h2&gt;
  
  
  El «split»: cuando un mercado se divide en dos y no te avisan
&lt;/h2&gt;

&lt;p&gt;Lo que está pasando ahora tiene nombre: el mercado de modelos de IA para empresas se está dividiendo en dos segmentos claros, y cada segmento tiene un ganador distinto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic = coding + B2B workflows.&lt;/strong&gt; &lt;strong&gt;OpenAI = consumer + search.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los números cuentan la historia mejor que cualquier análisis:&lt;/p&gt;

&lt;p&gt;Fuente: &lt;a href="https://www.kucoin.com/news/flash/anthropic-surpasses-openai-in-revenue-and-market-share" rel="noopener noreferrer"&gt;KuCoin News&lt;/a&gt;, &lt;a href="https://tech-insider.org/anthropic-vs-openai-2026/" rel="noopener noreferrer"&gt;Tech Insider&lt;/a&gt;, &lt;a href="https://michaelparekh.substack.com/p/ai-anthropic-and-openai-dominate" rel="noopener noreferrer"&gt;Michael Parekh/Substack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code generó $2.5 mil millones en ARR en solo 9 meses.&lt;/strong&gt; Nueve meses. Eso es más de lo que muchas empresas de software generan en toda su existencia.&lt;/p&gt;

&lt;p&gt;OpenAI, por su parte, tiene más del 80% de su revenue viene de suscripciones de consumidor (ChatGPT), con una tasa de conversión pagada de solo ~5%. Eso no es un modelo de negocio — es una apuesta por el consumidor que todavía no ha demostrado ser sostenible a escala enterprise.&lt;/p&gt;

&lt;p&gt;El CFO de OpenAI, Sarah Friar, &lt;a href="https://www.linkedin.com/posts/ismail-olasunkanmi-4b6283a7_anthropic-is-closing-a-round-at-a-900b-valuation-share-7458076418921631744-8S1A" rel="noopener noreferrer"&gt; reportedly advirtió internamente&lt;/a&gt; que sin aceleración, OpenAI podría tener problemas para financiar sus futuros contratos de compute. Eso es una voz de alarma seria viniendo de alguien que debería estar vendiendo la historia opuesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  La capa de infraestructura tiene 5 jugadores. No puedes ganarle a 5
&lt;/h2&gt;

&lt;p&gt;Aquí es donde la cosa se pone incómoda para quienes piensan que pueden «competir en el layer de modelos.»&lt;/p&gt;

&lt;p&gt;Miremos el mapa actual:&lt;/p&gt;

&lt;p&gt;Cinco jugadores. Todos con acceso a capital prácticamente ilimitado. Todos con contratos de cloud que representan cientos de miles de millones en revenue comprometido. &lt;a href="https://www.aicerts.ai/news/hyperscalers-drive-massive-ai-infrastructure-investment/" rel="noopener noreferrer"&gt;El capex combinado de hyperscalers en 2026 es de ~$650B&lt;/a&gt;, con 70-75% destinado explícitamente a infraestructura de AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No puedes ganar ahí.&lt;/strong&gt; No porque no seas bueno — porque el capital requerido para jugar en ese nivel ya no tiene sentido para un startup. Estamos hablando de miles de millones en GPUs, energía, data centers, y talento que puede ir a cualquier lado.&lt;/p&gt;

&lt;p&gt;Esto es lo que pasó con cloud: AWS, Azure y GCP commoditizaron la infraestructura. Lo que vino después fueron Salesforce, HubSpot, Workday. &lt;strong&gt;Aplicaciones sobre infraestructura.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La misma dinámica se está jugando ahora en AI. La diferencia es que el ciclo es 10x más rápido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que DeepSeek ya te estaba diciendo
&lt;/h2&gt;

&lt;p&gt;Esto no debería ser una sorpresa para nadie que haya estado prestando atención.&lt;/p&gt;

&lt;p&gt;A principios de 2025, DeepSeek demostró algo que muchos ignoraron: puedes tener modelos competitivos sin los cientos de miles de millones que OpenAI y Anthropic están quemando. El inference cost se derrumba. La capacidad de entrenar se distribuye.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pero DeepSeek también mostró otra cosa:&lt;/strong&gt; el infrastructure layer está saturado. Incluso con un modelo competitivo, la batalla por quién controla el acceso a compute y distribución es la que realmente importa.&lt;/p&gt;

&lt;p&gt;Para founders en mercados emergentes — América Latina, África, Sudeste Asiático — el mensaje es claro:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No intentes ser el próximo OpenAI. No intentes ser el próximo Anthropic. Intenta ser el próximo Stripe sobre AWS.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pago Fácil no compitió con Visa ni con Transbank. Construyó una capa encima que resolvió un problema que los demás no querían resolver: pagos online en Chile cuando nadie creía que era posible. Eso fue en 2011, con un plugin open source que 3,000 empresas usaban gratis antes de que tuviéramos nombre, web, o dashboard.&lt;/p&gt;

&lt;p&gt;Hoy, con la capa de infraestructura de AI sellada por 5 jugadores que se están preparando para IPO, la oportunidad está exactamente en el mismo lugar: &lt;strong&gt;en la capa de aplicación, resolviendo problemas específicos por industria, por geografía, por tipo de usuario.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué significa esto para tu stack en 2026
&lt;/h2&gt;

&lt;p&gt;Si eres developer o founder técnico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Si construyes agentes de código o flujos enterprise&lt;/strong&gt; → Anthropic (Claude) es tu base. 42-54% del mercado de code generation no es运气. Es adopción real por developers que se quedan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Si vas a consumer apps, search, o asistentes personales&lt;/strong&gt; → OpenAI sigue siendo el default. Brand awareness importa en ese segmento.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Si estás en LATAM, África, o mercados emergentes&lt;/strong&gt; → La oportunidad es profunda, no en modelos, sino en workflows verticales que las empresas globales no van a construir para ti.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si eres inversor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;La ronda de Anthropic a $900B con $30B ARR te da un 30x revenue. Eso es caro. Pero si Anthropic llega a $100B ARR en 3 años — plausible dado el momentum enterprise — estás ante un 3-4x desde el precio primario de IPO.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenAI perdiendo $14B en 2026 vs Anthropic siendo cash flow positivo en enterprise no es una comparación justa hoy, pero el mercado va a corregir eso cuando ambos sean públicos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El timing importa
&lt;/h2&gt;

&lt;p&gt;Según los reportes, Anthropic espera cerrar la ronda &lt;strong&gt;antes de fin de mayo 2026&lt;/strong&gt;. OpenAI está planeando IPO para octubre 2026.&lt;/p&gt;

&lt;p&gt;Esto significa que estamos en la &lt;strong&gt;última ventana&lt;/strong&gt; para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Invertir como ángel/VC en rounds primarios&lt;/strong&gt; (si tienes acceso — y si no lo tienes, este es el momento de construir relaciones para el próximo ciclo)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asegurar partnerships estratégicos&lt;/strong&gt; antes de que sean corporaciones públicas con prioridades de investor relations sobre producto&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Posicionarte en la capa de aplicación&lt;/strong&gt; antes de que los fondos corporativos inunden el espacio con capital barato&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Post-IPO, la dinámica cambia. Los fondos soberanos, los family offices masivos, y el capital institucional van a fluir hacia estos jugadores de forma diferente. La agilidad que existe hoy para builders individuales se va a reducir.&lt;/p&gt;

&lt;h2&gt;
  
  
  La pregunta que nadie hace
&lt;/h2&gt;

&lt;p&gt;Todos están discutiendo si $900B es la valuación correcta para Anthropic. Si $30B ARR justifica $900B de precio. Si OpenAI va a sobrevivir la presión.&lt;/p&gt;

&lt;p&gt;Pero la pregunta más interesante es otra:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué construyes sobre Anthropic y OpenAI que ellos nunca vão a construir?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Porque ellos no van a construir tu vertical. No van a entender tu mercado local. No van a tener tu data.&lt;/p&gt;

&lt;p&gt;Y en technology, la data siempre gana.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fuentes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://techcrunch.com/2026/04/29/sources-anthropic-could-raise-a-new-50b-round-at-a-valuation-of-900b/" rel="noopener noreferrer"&gt;TechCrunch: Anthropic $50B round at $900B valuation (Abr 2026)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://thenextweb.com/news/google-40-billion-anthropic-investment-gemini" rel="noopener noreferrer"&gt;The Next Web: Google $40B Anthropic investment (May 2026)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.kucoin.com/news/flash/anthropic-surpasses-openai-in-revenue-and-market-share" rel="noopener noreferrer"&gt;KuCoin News: Anthropic surpasses OpenAI in revenue and market share&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tech-insider.org/anthropic-vs-openai-2026/" rel="noopener noreferrer"&gt;Tech Insider: Anthropic vs OpenAI 2026&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://michaelparekh.substack.com/p/ai-anthropic-and-openai-dominate" rel="noopener noreferrer"&gt;Michael Parekh/Substack: AI Anthropic and OpenAI dominate&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.aicerts.ai/news/hyperscalers-drive-massive-ai-infrastructure-investment/" rel="noopener noreferrer"&gt;AI Certs: Hyperscalers AI infrastructure investment 2026&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tspasemiconductor.substack.com/p/the-2026-ai-ipo-wave-from-models" rel="noopener noreferrer"&gt;TSP Semiconductor: The 2026 AI IPO wave&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/ismail-olasunkanmi-4b6283a7_anthropic-is-closing-a-round-at-a-900b-valuation-share-7458076418921631744-8S1A" rel="noopener noreferrer"&gt;LinkedIn: Ismail Olasunkanmi post&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;¿Tienes dudas sobre cómo posicionarte en la capa de aplicación de AI? *&lt;/em&gt;Únete a mi comunidad de emprendedores en &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt;** — ahí podemos ayudarte entre todos a pensar estas decisiones.*&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/la-guerra-de-ia-se-termino-y-si-alguien-gano-pero-eso-no-es-lo-importante/" rel="noopener noreferrer"&gt;La guerra de IA se terminó. Y sí, alguien ganó — pero eso no es lo importante&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/la-guerra-de-ia-se-termino-y-si-alguien-gano-pero-eso-no-es-lo-importante/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ia</category>
    </item>
    <item>
      <title>La dependencia perfecta: cuando tu proveedor de IA se cae y tú te quedas mirando</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Sat, 02 May 2026 11:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/la-dependencia-perfecta-cuando-tu-proveedor-de-ia-se-cae-y-tu-te-quedas-mirando-5fmk</link>
      <guid>https://dev.to/cristiantalasanchez/la-dependencia-perfecta-cuando-tu-proveedor-de-ia-se-cae-y-tu-te-quedas-mirando-5fmk</guid>
      <description>&lt;p&gt;&lt;strong&gt;De humanos a IA, y de IA a nada&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El 15 de abril de 2026 me desperté y no pude trabajar.&lt;/p&gt;

&lt;p&gt;No fue un problema mío. No fue un problema de internet. Fue que Anthropic se cayó y yo —con mi plan Max a $100 dólares al mes, con Claude Code, con OpenClaw— estaba completamente paralizado.&lt;/p&gt;

&lt;p&gt;Cinco veces en un mes. Cinco.&lt;/p&gt;

&lt;p&gt;Después del tercer corte ya estaba frustrado. Después del cuarto ya estaba buscando alternativas. Y después del quinto entendí algo que llevaba meses evitándome: me había casado con un proveedor de IA.&lt;/p&gt;

&lt;p&gt;Exactamente igual que cuando era founder y dependía de ese empleado «irremplazable» que tenía todo en la cabeza y podía irse mañana. O cuando dependía de ese integrador que era el único que entendía el sistema legacy. O cuando dependía de ese proveedor de cloud que sabías que era demasiado grande para caer — hasta que cayó.&lt;/p&gt;

&lt;p&gt;El nombre del juego no cambió. Solo cambió el proveedor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los cinco casos que nadie quiere admitir
&lt;/h2&gt;

&lt;p&gt;Bueno, no solo a mí me pasó. Esto está pasando a nivel enterprise, a nivel startup, a nivel gobierno. Y hay datos documentados.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Anthropic le cortó el acceso a Belo (fintech argentina)
&lt;/h3&gt;

&lt;p&gt;En marzo 2026, Anthropic suspendió más de 60 cuentas de Belo —una fintech argentina de pagos— sin previo aviso. Todo su equipo de producto, parado. Durante 15 horas no pudieron acceder a sus prompts, a sus flujos de trabajo, a nada.&lt;/p&gt;

&lt;p&gt;Belo había construido toda su operación interna encima de Claude. Mensajería, soporte, automatización. Todo dependía de una sola API key.&lt;/p&gt;

&lt;p&gt;¿Qué pasó después? Después de muchas horas de soporte, de tickets, de pánico. Pero el daño ya estaba hecho: 15 horas de paralización total en una fintech que mueve dinero real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lección:&lt;/strong&gt; Si tu lógica de negocio vive en un prompt, eres rehén del proveedor.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Sullivan &amp;amp; Cromwell: la firma legal que citaba casos que no existían
&lt;/h3&gt;

&lt;p&gt;Sullivan &amp;amp; Cromwell es la firma legal que asesora a OpenAI en temas de seguridad de IA. En marzo de 2026, presentaron documentos judiciales con citas fabricadas por completo por IA.&lt;/p&gt;

&lt;p&gt;No una. No dos. Más de 1.300 casos similares se detectaron en cortes de Estados Unidos ese mes.&lt;/p&gt;

&lt;p&gt;¿Cuál fue el problema? Abogados usando IA para investigación legal sin verificar. Confiaron ciegamente en el modelo porque «parecía creíble». Y la firma que asesora a OpenAI sobre seguridad de IA estaba usando IA de forma insegura, sin supervisión humana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lección:&lt;/strong&gt; La IA no sabe lo que no sabe. Y a veces inventa con total confianza.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Disney y OpenAI: el acuerdo de $1.000 millones que se derrumbó
&lt;/h3&gt;

&lt;p&gt;Disney había negociado una sociedad de $1.000 millones con OpenAI. Marketing, contenido, asistente interno. Todo encarrilado.&lt;/p&gt;

&lt;p&gt;Tres días antes del anuncio público, OpenAI cerró Sora —su generador de video— porque perdían $1 millón diario ejecutándolo.&lt;/p&gt;

&lt;p&gt;Disney se enteró por la prensa. Cancelaron todo.&lt;/p&gt;

&lt;p&gt;No fue que OpenAI maliciosamente hundiera el acuerdo. Fue que una decisión interna de producto destruyó una sociedad de nueve cifras. Y nadie en Disney había contemplado ese escenario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lección:&lt;/strong&gt; Incluso los acuerdos más grandes dependen de la estabilidad del proveedor. Y los proveedores de IA están en constante rotación de productos.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. AWS: drones iraníes golpearon data centers en Emiratos Árabes Unidos
&lt;/h3&gt;

&lt;p&gt;Este es el que más me preocupa.&lt;/p&gt;

&lt;p&gt;En abril de 2026, drones iraníes atacaron data centers de AWS en Emiratos Árabes Unidos. Por primera vez en la historia, infraestructura cloud comercial fue atacada en un conflicto bélico activo.&lt;/p&gt;

&lt;p&gt;Caída regional completa. Banca. Streaming. Gobierno. Todo offline.&lt;/p&gt;

&lt;p&gt;AWS —el proveedor de cloud más grande del mundo— tuvo una región entera inoperable. No por un bug. Por un ataque físico con drones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lección:&lt;/strong&gt; La nube es física. Los servidores están en edificios. Y esos edificios pueden ser alcanzados.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. OpenAI cerró Sora: 67% sin plan B
&lt;/h3&gt;

&lt;p&gt;OpenAI cerró Sora en marzo de 2026. Razones: perdían $1 millón diario.&lt;/p&gt;

&lt;p&gt;67% de las empresas que tenían GenAI en producción NO tenían plan B. Ninguno. Si Sora fallaba, su contenido de video se detenía. Si el modelo principal se caía, su automatización se caía.&lt;/p&gt;

&lt;p&gt;81% de las empresas expresan preocupación por dependencia de proveedores. Casi nadie tiene estrategia multi-vendor.&lt;/p&gt;

&lt;p&gt;Eso no es una estadística. Es un accidente esperando ocurrir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo me afectó a mí
&lt;/h2&gt;

&lt;p&gt;Yo tenía la arrogancia de pensar que estaba más preparado.&lt;/p&gt;

&lt;p&gt;A principios de 2026 me «casé» con Anthropic. Plan Max. Claude Code para desarrollo. OpenClaw como agente principal. Todo mi flujo de trabajo encima de un solo proveedor. Duró poco —unas semanas— hasta que las caídas me obligaron a cambiar.&lt;/p&gt;

&lt;p&gt;Y funcionó. Por semanas. Hasta que dejó de funcionar.&lt;/p&gt;

&lt;p&gt;La primera caída: 40 minutos. «Seguro fue mi conexión», pensé.&lt;/p&gt;

&lt;p&gt;La segunda caída: 2 horas. Ya estaba nervioso.&lt;/p&gt;

&lt;p&gt;La tercera caída: 5 horas. Empecé a buscar qué hacer.&lt;/p&gt;

&lt;p&gt;La cuarta caída: 3 horas. Ya tenía a MiniMax como backup.&lt;/p&gt;

&lt;p&gt;La quinta caída: 1 hora. Pero ya no me importó. Ya había tomado la decisión.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No dejé Anthropic.&lt;/strong&gt; Eso es importante decirlo. Pero sí agregué opciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mi stack actual (qué hago diferente)
&lt;/h2&gt;

&lt;p&gt;Esto no es un tutorial. Es lo que realmente uso. Cada día.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para planificación estratégica:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anthropic Max&lt;/strong&gt; ($100/mes) — sigue siendo mi modelo principal para razonamiento complejo. No lo voy a negar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nemotron Super 3&lt;/strong&gt; — también para planificación, como backup activo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para agentes y uso de herramientas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MiniMax 2.7&lt;/strong&gt; ($~40/mes) — mi opción predeterminada para agentes que ejecutan tareas, automatización y trabajo pesado. Es rápido, es barato, y no depende de quién sea trending en TechCrunch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para cómputo local:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NVIDIA DGX Spark&lt;/strong&gt; — tengo un servidor con GPU local. Corro Qwen-code-next, Gemma 4 31B, Nemotron. Mis datos no salen de mi casa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Esto es importante: la información más sensible no vive en la nube de ningún proveedor.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Capa de abstracción:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt; — me permite cambiar entre proveedores sin cambiar código. Si mañana Google lanza algo mejor que Anthropic, migro en minutos, no en semanas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ollama Cloud&lt;/strong&gt; — cómputo abierto, sin vendor lock-in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lo que NO hago:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No confío en un solo modelo para todo&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No tengo lógica de negocio crítica en un solo prompt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No asumo que el proveedor de hoy existe mañana&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El benchmark público
&lt;/h2&gt;

&lt;p&gt;Lancé &lt;a href="https://benchmarks.cristiantala.com" rel="noopener noreferrer"&gt;benchmarks.cristiantala.com&lt;/a&gt; para tener datos reales, no marketing. Porque los números que dan los proveedores en sus landing pages son cherry-picked.&lt;/p&gt;

&lt;p&gt;Ahí puedes ver comparativas reales de latencia, costo por token y calidad de salida. Sin bullshit.&lt;/p&gt;

&lt;p&gt;La razón por la que hice eso es simple: si vas a depender de algo, al menos elige con datos, no con intuición.&lt;/p&gt;

&lt;h2&gt;
  
  
  Si la información de tu negocio vive en un prompt
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Eres rehén del proveedor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No lo digo yo. Lo dicen los cinco casos de arriba. Lo dice el dato de que 81% de empresas están preocupadas y casi ninguna tiene plan B.&lt;/p&gt;

&lt;p&gt;No se trata de ser paranoico. Se trata de ser realista.&lt;/p&gt;

&lt;p&gt;La dependencia en sí no es mala. Depender de AWS tiene sentido si entiendes los riesgos. Depender de Anthropic tiene sentido si tienes estrategia de mitigación.&lt;/p&gt;

&lt;p&gt;Lo que es malo es depender sin saber qué vas a hacer cuando el proveedor falle.&lt;/p&gt;

&lt;p&gt;Porque van a fallar. Es una certeza, no una posibilidad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dos reglas que me repito
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Diversifica antes de que te obliguen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No esperes a la primera caída para buscar alternativas. El momento de tener backup no es cuando el proveedor se cae. Es antes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Si vive en un prompt, tiene backup.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tu flujo de trabajo más crítico no puede depender de una sola API. La arquitectura para eso existe. Es más caro, sí. Pero es resiliente.&lt;/p&gt;

&lt;p&gt;¿Tienes dudas sobre dependencia de proveedores de IA en tu negocio? &lt;strong&gt;Únete a mi comunidad de emprendedores en &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt;&lt;/strong&gt; — ahí podemos ayudarte entre todos a pensar tu estrategia de IA sin convertirte en rehén de nadie.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/la-dependencia-perfecta-cuando-tu-proveedor-de-ia-se-cae-y-tu-te-quedas-mirando/" rel="noopener noreferrer"&gt;La dependencia perfecta: cuando tu proveedor de IA se cae y tú te quedas mirando&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/la-dependencia-perfecta-cuando-tu-proveedor-de-ia-se-cae-y-tu-te-quedas-mirando/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ia</category>
    </item>
    <item>
      <title>How to Use Claude Code with ANY LLM Provider (2026 Guide)</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Wed, 29 Apr 2026 20:32:33 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/how-to-use-claude-code-with-any-llm-provider-2026-guide-3d2l</link>
      <guid>https://dev.to/cristiantalasanchez/how-to-use-claude-code-with-any-llm-provider-2026-guide-3d2l</guid>
      <description>&lt;p&gt;I'm Cristian Tala. I founded and sold a fintech (Pago Fácil) for $23M, and now I invest in startups and build with AI. When my $200/month Anthropic Max subscription stopped being enough, I found a better way.&lt;/p&gt;

&lt;p&gt;Recently me encontré con un problema que drove me crazy. I've been using Claude Code, pero it was never enough. I started with la subscription Max de $100 al mes, then upgraded to la de $200 — la más cara que existe — y and still. O se me acaba la cuota a mitad de mes, o los servidores de Anthropic están caídos, o noto que las respuestas cada vez son más genéricas. Como si al saturarse la plataforma, el modelo se estuviera volviendo más tonto.&lt;/p&gt;

&lt;p&gt;That's when I realized something: estoy pagando $200 al mes (la subscription más cara que existe) por un servicio que me falla más de lo que funciona.&lt;/p&gt;

&lt;p&gt;So I started looking for alternatives. Y what I found changed how en que trabajo con IA.&lt;/p&gt;

&lt;p&gt;Pero acá viene the part almost nobody knows: &lt;strong&gt;Claude Code isn't a model. It's an interface.&lt;/strong&gt; Y esa interfaz se puede conectar a casi cualquier provider de LLM que exista.&lt;/p&gt;

&lt;p&gt;I'm not talking about hacking ni de hacer algo ilegal. Te estoy hablando de una funcionalidad que el propio Claude Code soporta: cambiar el ANTHROPIC_BASE_URL para apuntar a otro provider con endpoint compatible. Y cuando hice eso, descubrí algo que blew my mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  What nobody tells you sobre Claude Code
&lt;/h3&gt;

&lt;p&gt;Claude Code es una CLI (command-line interface). Envía requests a una API que sigue el formato de Anthropic. Pero ese formato no es exclusivo de Anthropic.&lt;/p&gt;

&lt;p&gt;Proveedores como Z.ai (GLM), Xiaomi (MiMo), Moonshot (Kimi), DeepSeek, y muchos otros exponen endpoints que son &lt;strong&gt;Anthropic-compatibles&lt;/strong&gt;. Claude Code envía un request, el provider responde, y todo funciona como si nada hubiera cambiado.&lt;/p&gt;

&lt;p&gt;En la práctica: clonas una carpeta de configuración, pegas tu API key, y claude arranca usando un modelo que cuesta $6/mes en vez de $200.&lt;/p&gt;

&lt;p&gt;Too good to be true? Yo también lo pensé. Por eso hice dos cosas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ctala/claude-code-providers" rel="noopener noreferrer"&gt;Monté un repositorio con workspaces listos&lt;/a&gt;&lt;/strong&gt; — 20+ provideres configurados, cada uno con su settings.json, instrucciones y troubleshooting. MIT license, úsalo como quieras.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ctala/ai-benchmarks-alternativos" rel="noopener noreferrer"&gt;Corrí 7,725 benchmarks con 68 modelos&lt;/a&gt;&lt;/strong&gt; — 91 tests por modelo, 23 suites de evaluación, juez Phi-4 local (Microsoft, 14B, sin conflicto de interés). No tomé la palabra del marketing de ninguno. Medí.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los resultados me sorprendieron. Y creo que a ti también te van a sorprender.&lt;/p&gt;




&lt;h3&gt;
  
  
  El dato que incomoda: los modelos más caros son los peores
&lt;/h3&gt;

&lt;p&gt;Antes de pasar a la configuración, you need to see something. Porque sino you'll think I'm selling you snake oil.&lt;/p&gt;

&lt;p&gt;Corrí 68 modelos a través de 91 tests cada uno — razonamiento, coding, generación de contenido, tool calling, agentes, traducción, y más. El juez fue Phi-4 de Microsoft corriendo local en Ollama. Cero sesgo comercial.&lt;/p&gt;

&lt;p&gt;La correlación entre precio y calidad fue &lt;strong&gt;ρ = −0.460&lt;/strong&gt; (p = 0.001). Negativa. O sea: &lt;strong&gt;los modelos más caros tienden a rendir peor&lt;/strong&gt; en tests single-turn.&lt;/p&gt;

&lt;p&gt;Y en contenido, la correlación es &lt;strong&gt;ρ = −0.603&lt;/strong&gt; (p &amp;lt; 0.001). Fuerte. El modelo más caro del benchmark, GPT-5.5 a $46.50/1k calls, sacó un score de 6.44. Mientras tanto, Llama 3.1 8B en Groq a $0.14/1k calls sacó 7.66.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;55× más barato, 19% mejor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't opinion. Es la data que cualquiera puede replicar si clona &lt;a href="https://github.com/ctala/ai-benchmarks-alternativos" rel="noopener noreferrer"&gt;el benchmark&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Por qué pasa esto?
&lt;/h4&gt;

&lt;p&gt;Porque los modelos premium suelen ser «thinking models» — consumen tokens de razonamiento interno antes de responder. En un test single-turn corto, ese razonamiento extra no mejora el resultado pero sí dispara el costo. Kimi K2.6 facturaba ~3,500 tokens de output cuando el texto visible era solo ~700. &lt;strong&gt;Un multiplicador de 5× en costo por la misma respuesta.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Además, los modelos económicos modernos (Llama, GPT-OSS, Gemma 4) están tan bien afinados que para la inmensa mayoría de tareas de coding y contenido, la diferencia con los premium es imperceptible en la práctica.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Top 10 Nobody Expected
&lt;/h3&gt;

&lt;p&gt;Esto es lo que salió del benchmark v2.4 (29 de abril 2026):&lt;/p&gt;

&lt;p&gt;Modelo&lt;br&gt;
Score&lt;br&gt;
$/1k calls&lt;br&gt;
tok/s&lt;br&gt;
Provider&lt;/p&gt;

&lt;p&gt;1&lt;br&gt;
&lt;strong&gt;Llama 4 Scout 17B&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.67&lt;/strong&gt;&lt;br&gt;
$0.54&lt;br&gt;
244&lt;br&gt;
Groq&lt;/p&gt;

&lt;p&gt;2&lt;br&gt;
&lt;strong&gt;Llama 3.1 8B Instant&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.66&lt;/strong&gt;&lt;br&gt;
$0.14&lt;br&gt;
368&lt;br&gt;
Groq&lt;/p&gt;

&lt;p&gt;3&lt;br&gt;
&lt;strong&gt;Llama 3.3 70B&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.64&lt;/strong&gt;&lt;br&gt;
$1.36&lt;br&gt;
238&lt;br&gt;
Groq&lt;/p&gt;

&lt;p&gt;4&lt;br&gt;
&lt;strong&gt;Mistral Small 4&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.54&lt;/strong&gt;&lt;br&gt;
$0.94&lt;br&gt;
110&lt;br&gt;
OpenRouter&lt;/p&gt;

&lt;p&gt;5&lt;br&gt;
&lt;strong&gt;GPT-OSS 20B&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.53&lt;/strong&gt;&lt;br&gt;
$0.47&lt;br&gt;
633&lt;br&gt;
Groq&lt;/p&gt;

&lt;p&gt;6&lt;br&gt;
&lt;strong&gt;Gemini 3.1 Flash Lite&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.50&lt;/strong&gt;&lt;br&gt;
$2.33&lt;br&gt;
148&lt;br&gt;
Google&lt;/p&gt;

&lt;p&gt;7&lt;br&gt;
&lt;strong&gt;Grok 4.1 Fast&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.50&lt;/strong&gt;&lt;br&gt;
$0.81&lt;br&gt;
116&lt;br&gt;
xAI&lt;/p&gt;

&lt;p&gt;8&lt;br&gt;
&lt;strong&gt;GPT-OSS 120B&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.41&lt;/strong&gt;&lt;br&gt;
$0.00&lt;br&gt;
75&lt;br&gt;
Ollama Cloud&lt;/p&gt;

&lt;p&gt;9&lt;br&gt;
&lt;strong&gt;Devstral Small&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.35&lt;/strong&gt;&lt;br&gt;
$0.48&lt;br&gt;
147&lt;br&gt;
OpenRouter&lt;/p&gt;

&lt;p&gt;10&lt;br&gt;
&lt;strong&gt;MiMo V2.5 (Xiaomi)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7.32&lt;/strong&gt;&lt;br&gt;
$0.13&lt;br&gt;
79&lt;br&gt;
Xiaomi&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 of 10 are open-source.&lt;/strong&gt; Los 4 modelos en Groq directo tienen más de 200 tokens/segundo, score arriba de 7.5 y cuestan menos de $1.50 por 1k llamadas. Esa combinación no existe en provideres cerrados.&lt;/p&gt;

&lt;p&gt;Y for those wondering: sí, Claude Opus 4.7 quedó fuera del top 10. Saca 7.16 y cuesta $117 por 1k calls. &lt;strong&gt;20× más caro que DeepSeek V4 Flash, que via NIM gratis saca 7.07.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The hard question: ¿pagarías 20× más para ganar 8% de score?&lt;/p&gt;


&lt;h3&gt;
  
  
  El mismo modelo, distinto provider: matters more than you think
&lt;/h3&gt;

&lt;p&gt;Otro hallazgo que me hizo repensar todo: &lt;strong&gt;el provider importa tanto como el modelo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemma 4 31B corrió en tres provideres distintos:&lt;/p&gt;

&lt;p&gt;Provider&lt;br&gt;
Score&lt;br&gt;
Costo&lt;br&gt;
tok/s&lt;/p&gt;

&lt;p&gt;NVIDIA NIM&lt;br&gt;
7.20&lt;br&gt;
&lt;strong&gt;$0.00&lt;/strong&gt;&lt;br&gt;
22.8&lt;/p&gt;

&lt;p&gt;OpenRouter&lt;br&gt;
7.20&lt;br&gt;
$0.99&lt;br&gt;
22.8&lt;/p&gt;

&lt;p&gt;DGX Spark local (Q4)&lt;br&gt;
6.84&lt;br&gt;
$0.00&lt;br&gt;
9.3&lt;/p&gt;

&lt;p&gt;NIM gratis da &lt;strong&gt;exactamente el mismo resultado&lt;/strong&gt; que OpenRouter pagado. Y Kimi K2.5 en NIM gratis empata al 100% con OpenRouter a $1.26/1k calls. Pagar por ese modelo cuando NIM lo da gratis es, literalmente, literally burning money.&lt;/p&gt;

&lt;p&gt;La regla es simple: &lt;strong&gt;si Groq tiene el modelo, usa Groq.&lt;/strong&gt; Su LPU entrega 5-10× más velocidad a precio competitivo. Si quieres costo cero con calidad FP16, usa NIM (con límite de 40 RPM, pero gratis).&lt;/p&gt;


&lt;h3&gt;
  
  
  Cómo configurar Claude Code con cualquier provider — paso a paso
&lt;/h3&gt;

&lt;p&gt;Here comes the practical part. Todo lo que describo está documentado con archivos de configuración listos en &lt;a href="https://github.com/ctala/claude-code-providers" rel="noopener noreferrer"&gt;github.com/ctala/claude-code-providers&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Preparación: limpia tu entorno
&lt;/h4&gt;

&lt;p&gt;Antes de cualquier cosa, verifica que no tengas variables del shell sobrescribiendo la configuración:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;env | grep ANTHROPIC

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si ves ANTHROPIC_AUTH_TOKEN, ANTHROPIC_BASE_URL o ANTHROPIC_API_KEY en tu ~/.zshrc o ~/.bashrc, las variables del shell tienen prioridad sobre los settings por carpeta. Desactívalas antes de probar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL ANTHROPIC_API_KEY

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  La estructura: cada provider es una carpeta independiente
&lt;/h4&gt;

&lt;p&gt;El repositorio funciona así: cada subcarpeta es un workspace Claude Code completo con su configuración aislada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider/
├── .claude/
│   ├── settings.json              # Config compartible (BASE_URL, modelos)
│   ├── settings.local.json.example # Plantilla con placeholder para tu key
│   └── settings.local.json        # Tu API key real (gitignored)
├── .gitignore                     # Incluye settings.local.json
└── README.md                      # Instrucciones específicas

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Setup genérico (3 pasos)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## 1. Entra a la carpeta del provider&lt;/span&gt;
cd /

&lt;span class="gu"&gt;## 2. Copia la plantilla y pega tu API key&lt;/span&gt;
cp .claude/settings.local.json.example .claude/settings.local.json
$EDITOR .claude/settings.local.json

&lt;span class="gu"&gt;## 3. Lanza Claude Code&lt;/span&gt;
claude

&lt;span class="gu"&gt;## Dentro de Claude, verifica:&lt;/span&gt;
/status    # Confirma BASE_URL + modelo activo
/model     # Cambiar modelo si el provider tiene varios

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tienes 20+ provideres configurados así. Cambias de uno a otro con un cd. No hay conflicto porque cada settings.local.json vive en su propia carpeta.&lt;/p&gt;




&lt;h3&gt;
  
  
  Proveedores por category — cuál elegir según tu situación
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Plan mensual: alternativas fijas a Anthropic Max
&lt;/h4&gt;

&lt;p&gt;Carpeta&lt;br&gt;
Proveedor&lt;br&gt;
Modelos&lt;br&gt;
USD/mes&lt;/p&gt;

&lt;p&gt;xiaomi/&lt;br&gt;
Xiaomi MiMo Token Plan&lt;br&gt;
MiMo V2.5, V2.5-Pro, V2-Omni&lt;br&gt;
&lt;strong&gt;$6-$88&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;zai-coding/&lt;br&gt;
Z.ai GLM Coding Plan&lt;br&gt;
GLM-4.7, GLM-5.1, GLM-4.5-Air&lt;br&gt;
~$10-$80&lt;/p&gt;

&lt;p&gt;minimax/&lt;br&gt;
MiniMax Coding Plan&lt;br&gt;
M2.7, M2.7-highspeed&lt;br&gt;
$19-$50&lt;/p&gt;

&lt;p&gt;qwen-coding/&lt;br&gt;
Alibaba Qwen Coding Plan&lt;br&gt;
Qwen3-Coder-Plus, Qwen3-Max&lt;br&gt;
Variable&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mi recomendación personal&lt;/strong&gt;: Xiaomi MiMo a $14/mes (plan Standard). MiMo V2.5 salió #10 global en el benchmark con score 7.32 — por encima de Claude Opus 4.7 en 3 de 4 pilares. A 42× menos del costo.&lt;/p&gt;
&lt;h4&gt;
  
  
  Pay-as-you-go: para cuando no quieres subscription
&lt;/h4&gt;

&lt;p&gt;Carpeta&lt;br&gt;
Proveedor&lt;br&gt;
Modelos&lt;br&gt;
Notas&lt;/p&gt;

&lt;p&gt;deepseek/&lt;br&gt;
DeepSeek&lt;br&gt;
DeepSeek-V3, Coder&lt;br&gt;
De los más baratos del mercado&lt;/p&gt;

&lt;p&gt;openrouter/&lt;br&gt;
OpenRouter&lt;br&gt;
300+ modelos&lt;br&gt;
Una key para todo, fallback automático&lt;/p&gt;

&lt;p&gt;moonshot/&lt;br&gt;
Moonshot Kimi&lt;br&gt;
Kimi K2 Turbo&lt;br&gt;
Endpoint Anthropic-compat oficial&lt;/p&gt;

&lt;p&gt;zai-api/&lt;br&gt;
Z.ai BigModel API&lt;br&gt;
GLM-4.7, GLM-5.1&lt;br&gt;
Pay-per-token&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt; es el comodín: una sola API key te da acceso a Anthropic, xAI, Google, Meta, Qwen, DeepSeek — 300+ modelos. Si quieres flexibilidad sin compromisos, es la opción.&lt;/p&gt;
&lt;h4&gt;
  
  
  Cloud enterprise: AWS, GCP, Azure
&lt;/h4&gt;

&lt;p&gt;Carpeta&lt;br&gt;
Plataforma&lt;br&gt;
Variables&lt;/p&gt;

&lt;p&gt;aws-bedrock/&lt;br&gt;
AWS&lt;br&gt;
CLAUDE_CODE_USE_BEDROCK=1&lt;/p&gt;

&lt;p&gt;google-vertex/&lt;br&gt;
GCP&lt;br&gt;
CLAUDE_CODE_USE_VERTEX=1&lt;/p&gt;

&lt;p&gt;azure-foundry/&lt;br&gt;
Azure&lt;br&gt;
Endpoint Anthropic-compat&lt;/p&gt;

&lt;p&gt;Si tu empresa ya tiene cuentas en AWS/GCP/Azure, esto te permite consumir Claude (Bedrock, Vertex) o modelos third-party (Foundry) bajo tu IAM y facturación corporativa. Sin APIs sueltas, sin credenciales fuera del ecosistema.&lt;/p&gt;
&lt;h4&gt;
  
  
  Local: si tienes el hardware, la privacidad no tiene precio
&lt;/h4&gt;

&lt;p&gt;Carpeta&lt;br&gt;
Stack&lt;br&gt;
Modelos típicos&lt;/p&gt;

&lt;p&gt;ollama-local/&lt;br&gt;
Ollama 0.11+ (Anthropic-compat nativo)&lt;br&gt;
Qwen3-Coder, Llama 3.3, DeepSeek-V3&lt;/p&gt;

&lt;p&gt;lmstudio-local/&lt;br&gt;
LM Studio + LiteLLM proxy&lt;br&gt;
Cualquier GGUF&lt;/p&gt;

&lt;p&gt;nvidia-nim/&lt;br&gt;
Docker NIM container&lt;br&gt;
NIMs publicados por NVIDIA&lt;/p&gt;

&lt;p&gt;Ollama 0.11+ expone el endpoint Anthropic-compat de forma nativa en :11434. Sin proxy, sin traductor. Es tan simple como correr el container y apuntar ANTHROPIC_BASE_URL=&lt;a href="http://localhost:11434" rel="noopener noreferrer"&gt;http://localhost:11434&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Si tienes un DGX Spark (o cualquier GPU potente con 24GB+), puedes correr Qwen3-Coder:480B, Llama 3.3:70b, o DeepSeek-Coder-V2 localmente. Costo: $0 (más electricidad). Privacidad: total.&lt;/p&gt;


&lt;h3&gt;
  
  
  La trampa de ANTHROPIC_AUTH_TOKEN vs ANTHROPIC_API_KEY
&lt;/h3&gt;

&lt;p&gt;Un error que me quitó 2 horas la primera vez — y por eso lo puse en el &lt;a href="https://github.com/ctala/claude-code-providers/blob/main/_docs/troubleshooting.md" rel="noopener noreferrer"&gt;docs/troubleshooting.md&lt;/a&gt; del repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ANTHROPIC_AUTH_TOKEN&lt;/strong&gt; — Para provideres third-party con endpoint Anthropic-compat (Z.ai, Xiaomi, Moonshot, DeepSeek).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ANTHROPIC_API_KEY&lt;/strong&gt; — Solo para Anthropic directo (pay-as-you-go en api.anthropic.com).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Confundirlas = error 401 inmediato. Y no es obvio hasta que lees la documentación del provider.&lt;/p&gt;


&lt;h3&gt;
  
  
  ¿Pero funcionan de verdad estos modelos para coding?
&lt;/h3&gt;

&lt;p&gt;The million-dollar question. Si vas a usar Claude Code, es para programar. Probé 23 suites distintas, incluyendo code_generation, tool_calling, y structured_output.&lt;/p&gt;

&lt;p&gt;Los resultados por suite:&lt;/p&gt;

&lt;p&gt;Suite&lt;br&gt;
Mejor modelo&lt;br&gt;
Score&lt;/p&gt;

&lt;p&gt;Code generation&lt;br&gt;
Llama 4 Scout 17B&lt;br&gt;
&lt;strong&gt;8.04&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tool calling&lt;br&gt;
Llama 3.1 8B Instant&lt;br&gt;
&lt;strong&gt;8.45&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Structured output&lt;br&gt;
Llama 3.1 8B Instant&lt;br&gt;
&lt;strong&gt;8.00&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;String precision&lt;br&gt;
Devstral Small&lt;br&gt;
&lt;strong&gt;8.12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Razonamiento&lt;br&gt;
GPT-OSS 20B&lt;br&gt;
&lt;strong&gt;7.97&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deep reasoning&lt;br&gt;
Llama 4 Scout 17B&lt;br&gt;
&lt;strong&gt;7.68&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Devstral Small (Mistral, Apache 2.0, $0.10/$0.30 per M tokens) es la sorpresa del benchmark — open-source, barato, y domina coding con un tool calling excelente.&lt;/p&gt;

&lt;p&gt;Ahora, an honest warning: &lt;strong&gt;el benchmark mide modelos solos, single-turn, sin herramientas.&lt;/strong&gt; En producción real, un workflow N8N con herramientas (búsqueda web, RAG, API calls) puede invertir el ranking. Qwen 3.5 397B, por ejemplo, parece «regular» en el benchmark (score global 6.72) pero en producción genera &lt;a href="https://ecosistemastartup.com/apple-pay-y-google-pay-80-menos-fraude-que-tarjetas-fisicas/" rel="noopener noreferrer"&gt;artículos excelentes para ecosistemastartup.com&lt;/a&gt; porque se integra perfecto con tools de búsqueda.&lt;/p&gt;

&lt;p&gt;El benchmark te da la línea base. Tu workflow real te da el resultado.&lt;/p&gt;


&lt;h3&gt;
  
  
  Setups recomendados por presupuesto
&lt;/h3&gt;
&lt;h4&gt;
  
  
  $0/mes — Solo local
&lt;/h4&gt;

&lt;p&gt;Si tienes el hardware (DGX Spark, GPU 24GB+, Apple Silicon):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modelos:

- Gemma 4 31B → tareas rápidas

- Qwen 3.5 72B → coding y razonamiento de calidad

- Phi-4 14B → juez local

Setup: ollama-local/ carpeta

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  $14-20/mes — Una subscription fija
&lt;/h4&gt;

&lt;p&gt;Opción&lt;br&gt;
Qué obtienes&lt;br&gt;
Mejor para&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Xiaomi MiMo ($14)&lt;/strong&gt;&lt;br&gt;
MiMo V2.5 (score 7.32)&lt;br&gt;
Content + coding económico&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GLM Coding ($10)&lt;/strong&gt;&lt;br&gt;
GLM-5.1, GLM-4.7&lt;br&gt;
Coding con costo fijo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenRouter pay-as-you-go&lt;/strong&gt;&lt;br&gt;
300+ modelos, ~$20 crédito&lt;br&gt;
Flexibilidad máxima&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mi recomendación&lt;/strong&gt;: OpenRouter. Una API key para todo. Si un modelo falla o se deprecata, cambias sin reconfigurar nada.&lt;/p&gt;

&lt;h4&gt;
  
  
  $50/mes — Combo óptimo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenRouter pay-as-you-go: ~$15-20 (DeepSeek + Gemini Flash + Devstral)
MiniMax Agent Pro: $19 (M2.7 para agentes, costo fijo)
Gemini CLI: $0 (prototipos rápidos)
Total: ~$35-40

Esto reemplaza a la subscription Max de $200 de Anthropic — y no dependes de su disponibilidad.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  $100+/mes — Setup completo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenRouter: ~$20 (DeepSeek + Devstral para volumen)
MiniMax Agent: $19 (M2.7 para agentes 24/7)
NIM local: $0 (modelos open-source para privacidad)
Anthropic Max (opcional): $200 (Opus 4.7 solo para tareas críticas)

Nota: Anthropic Max lo uso solo para tareas críticas donde necesito Opus 4.7. Para todo lo demás, los modelos alternativos rinden igual o mejor por fracción del costo.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To put it in perspective: yo pago $200 al mes por Anthropic Max (la subscription más cara que existe) y me alcanza la mitad del tiempo. Cuando los servidores de Claude se saturan, las respuestas se vuelven más genéricas — lo notas. Con el setup que describo ($35-40) trabajo sin límites, con fallback automático y sin depender de una sola empresa. This isn't theory — es lo que uso todos los días.&lt;/p&gt;

&lt;p&gt;El combo de abajo es como tener 300 modelos a tu disposición con una sola API key (OpenRouter). Si uno falla, usas otro. Si Anthropic se cae, rotas a Groq. Si DeepSeek está lento, usas MiMo. Tienes poder de negociación.&lt;/p&gt;




&lt;h3&gt;
  
  
  Lo que aprendí haciendo esto
&lt;/h3&gt;

&lt;p&gt;Running 7,725 benchmarks con 68 modelos isn't free. Invertí:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;~$350-400 USD&lt;/strong&gt; en APIs (OpenAI, OpenRouter, MiniMax, Anthropic, Xiaomi)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~$45/mes&lt;/strong&gt; en suscripciones activas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~190h&lt;/strong&gt; de cómputo cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~50h&lt;/strong&gt; de cómputo local (GPU en Mac M-series + DGX Spark)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~80-100h&lt;/strong&gt; de trabajo humano (diseño de tests, debugging, análisis, documentación)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todo eso está disponible gratis bajo MIT license en los dos repositorios. If this saves you an afternoon de debugging de Anthropic Base URL, give it a star — ayuda a que otros devs lo encuentren.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ctala/claude-code-providers" rel="noopener noreferrer"&gt;github.com/ctala/claude-code-providers&lt;/a&gt;&lt;/strong&gt; — workspaces listos para 20+ provideres&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ctala/ai-benchmarks-alternativos" rel="noopener noreferrer"&gt;github.com/ctala/ai-benchmarks-alternativos&lt;/a&gt;&lt;/strong&gt; — 7,725 benchmarks, 68 modelos, 23 suites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://benchmarks.cristiantala.com/" rel="noopener noreferrer"&gt;benchmarks.cristiantala.com&lt;/a&gt;&lt;/strong&gt; — dashboard interactivo para encontrar tu modelo en 30 segundos&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The uncomfortable truth
&lt;/h3&gt;

&lt;p&gt;No existe el «mejor modelo». Y quien te diga que sí, probablemente te está vendiendo uno.&lt;/p&gt;

&lt;p&gt;Lo que existe es el mejor modelo &lt;strong&gt;para lo que necesitas, con el presupuesto que tienes, en el contexto que trabajas.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Coding rápido y barato? Devstral Small o DeepSeek V3.&lt;/li&gt;
&lt;li&gt;¿Agentes 24/7 con costo predecible? MiniMax M2.7 a $19/mes fijo.&lt;/li&gt;
&lt;li&gt;¿Contenido SEO en español? DeepSeek V3.2 es #1 en news_seo_writing.&lt;/li&gt;
&lt;li&gt;¿Soporte al cliente donde la honestidad importa? Claude Sonnet — no inventa respuestas.&lt;/li&gt;
&lt;li&gt;¿Privacidad total? Ollama local con los modelos que ya corren en tu hardware.&lt;/li&gt;
&lt;li&gt;¿Flexibilidad absoluta? OpenRouter con una key para 300+ modelos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 2026 LLM ecosystem is a feast — y la mayoría sigue comiendo en el mismo restaurante caro. Hay alternativas mejores, más baratas, y en muchos casos, abiertas.&lt;/p&gt;

&lt;p&gt;La pregunta no es «cuál es el mejor modelo». La pregunta es: ¿qué quieres construir hoy, y cuánto quieres pagar por las herramientas?&lt;/p&gt;




&lt;p&gt;¿Tienes dudas sobre qué modelo usar para tu caso específico? &lt;strong&gt;&lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Únete a mi comunidad de emprendedores en Cágala, Aprende, Repite&lt;/a&gt;&lt;/strong&gt; — ahí podemos ayudarte entre todos. Y si quieres ver cómo armo los benchmarks con N8N y OpenClaw en la práctica, el workflow está documentado en el repo.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://cristiantala.com/claude-code-cualquier-llm-guia-2026/" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Tu Primer Agente de IA Local con OpenClaw + Ollama: Guía para Principiantes</title>
      <dc:creator>Cristian Tala</dc:creator>
      <pubDate>Wed, 29 Apr 2026 17:00:04 +0000</pubDate>
      <link>https://dev.to/cristiantalasanchez/tu-primer-agente-de-ia-local-con-openclaw-ollama-guia-para-principiantes-535d</link>
      <guid>https://dev.to/cristiantalasanchez/tu-primer-agente-de-ia-local-con-openclaw-ollama-guia-para-principiantes-535d</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;En 15 minutos vas a tener un asistente de IA que corre en &lt;strong&gt;tu&lt;/strong&gt; computador — sin enviarle tus datos a nadie.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ¿Por Qué Quieres Esto?
&lt;/h3&gt;

&lt;p&gt;Seguro usas ChatGPT o Claude. Son buenos, pero tienen un problema: &lt;strong&gt;todo lo que escribes se va a un servidor que no controlas&lt;/strong&gt;. Cada pregunta, cada documento que subes, cada dato de tu empresa — está en otro lado.&lt;/p&gt;

&lt;p&gt;Esta guía te da una alternativa: un agente de IA que vive en tu computador. &lt;strong&gt;Tus datos no salen de tu máquina.&lt;/strong&gt; Y lo mejor: &lt;strong&gt;es gratis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;¿La contra? Necesitas instalar 2 programas (te explico cómo, paso a paso). Si sabes copiar y pegar, puedes hacerlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué Es Cada Cosa?
&lt;/h3&gt;

&lt;p&gt;Antes de empezar, para que no estés pegando cosas sin entender:&lt;/p&gt;

&lt;p&gt;– &lt;strong&gt;Ollama&lt;/strong&gt; = El programa que descarga y ejecuta «cerebros de IA» en tu computador. Es como instalar Spotify, pero en vez de música, descargas inteligencia artificial. – &lt;strong&gt;OpenClaw&lt;/strong&gt; = El programa que conecta ese cerebro de IA con tus apps (WhatsApp, Telegram, etc.). Sin OpenClaw, el modelo solo funciona dentro de Ollama. Con OpenClaw, le puedes hablar desde donde sea.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué Necesitas?
&lt;/h3&gt;

&lt;p&gt;– &lt;strong&gt;Un computador:&lt;/strong&gt; Mac (de preferencia con chip M1, M2, M3 o M4) o un PC con al menos &lt;strong&gt;16GB de memoria RAM&lt;/strong&gt; (si tienes 8GB también funciona, solo va un poco más lento) – &lt;strong&gt;Internet:&lt;/strong&gt; Solo para descargar los programas. Después funciona sin internet. – &lt;strong&gt;15 minutos&lt;/strong&gt; de tu tiempo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1: Instalar Ollama (2 minutos)
&lt;/h3&gt;

&lt;p&gt;Ollama es lo primero que necesitas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Si usas Mac:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Abre &lt;strong&gt;Terminal&lt;/strong&gt; (presiona &lt;code&gt;Command + Espacio&lt;/code&gt;, escribe «Terminal» y presiona Enter) 2. Copia y pega esta línea completa:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Visita la página de &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;descarga de Ollama&lt;/a&gt; y sigue las instrucciones para tu sistema operativo. El instalador se encarga de todo automáticamente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Presiona &lt;strong&gt;Enter&lt;/strong&gt; 4. Va a pedirte tu contraseña — escríbela aunque no veas los caracteres aparecer (es normal) y presiona Enter&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Si usas Windows:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Abre tu navegador y ve a &lt;strong&gt;&lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;https://ollama.com/download&lt;/a&gt;&lt;/strong&gt; 2. Haz clic en el botón de descarga 3. Abre el archivo que descargaste y sigue las instrucciones (como instalar cualquier programa)&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Verifica que Se Instaló
&lt;/h4&gt;

&lt;p&gt;En la Terminal (o la consola en Windows), escribe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;ollama &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si ves un número (como &lt;code&gt;0.x.x&lt;/code&gt;), &lt;strong&gt;funciona&lt;/strong&gt;. Si te dice «command not found», vuelve a intentar la instalación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¡Perfecto!&lt;/strong&gt; Ollama está instalado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2: Descargar el Modelo de IA (5 minutos)
&lt;/h3&gt;

&lt;p&gt;Ahora descargamos el «cerebro» de tu agente.&lt;/p&gt;

&lt;h4&gt;
  
  
  Si tienes buena RAM (16GB o más)
&lt;/h4&gt;

&lt;p&gt;En la Terminal, pega:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;ollama pull qwen3.5:27b&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Si tienes poca RAM (8GB)
&lt;/h4&gt;

&lt;p&gt;En la Terminal, pega:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;ollama pull gemma4&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;¿No sabes cuánta RAM tienes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;– &lt;strong&gt;Mac:&lt;/strong&gt; Menú Apple → «Acerca de esta Mac» → mira donde dice «Memoria»&lt;/p&gt;

&lt;p&gt;– &lt;strong&gt;Windows:&lt;/strong&gt; Escribe «Información del sistema» en el buscador → busca «RAM instalada»&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto descarga entre &lt;strong&gt;4GB y 16GB&lt;/strong&gt; de datos. Mientras espera, ve por un café &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;¿Qué modelo elegir? Mira los datos, no la hype.&lt;/strong&gt; Armé una &lt;a href="https://benchmarks.cristiantala.com/" rel="noopener noreferrer"&gt;calculadora interactiva de modelos IA&lt;/a&gt; donde tú le dices tu presupuesto, cuántas requests al mes esperas, qué calidad mínima necesitas — y te recomienda el modelo ideal. Se basa en &lt;strong&gt;91 tests reales&lt;/strong&gt; contra decenas de modelos. Filtra por open-source, tool calling, velocidad, incluso alternativas a Claude o ChatGPT. Ve los datos y elige con información, no por lo que dice Twitter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cuando termine, vas a ver un mensaje que dice «success» o similar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 3: Instalar OpenClaw (3 minutos)
&lt;/h3&gt;

&lt;p&gt;OpenClaw conecta tu modelo de IA con tus apps.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¿Tienes Node.js?
&lt;/h4&gt;

&lt;p&gt;Node.js es un programa que OpenClaw necesita para funcionar.&lt;/p&gt;

&lt;p&gt;En la Terminal, pega:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;– Si ves algo como &lt;code&gt;v22.x.x&lt;/code&gt; o &lt;code&gt;v24.x.x&lt;/code&gt; → &lt;strong&gt;ya lo tienes&lt;/strong&gt;, salta al siguiente paso. – Si te dice algo como «command not found» → &lt;strong&gt;Necesitas instalarlo:&lt;/strong&gt; – &lt;strong&gt;Mac:&lt;/strong&gt; Ve a &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;, descarga la versión LTS e instálala. – &lt;strong&gt;Windows:&lt;/strong&gt; Igual, &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;, descarga la versión LTS.&lt;/p&gt;

&lt;h4&gt;
  
  
  Instala OpenClaw
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; openclaw@latest&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Va a tardar un minuto o dos. Cuando termine, tienes OpenClaw.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 4: Conectar Todo (5 minutos)
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a conectar OpenClaw con Ollama. El asistente de OpenClaw hace casi todo por ti.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ejecuta el Asistente
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;openclaw onboard&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El asistente te va a hacer preguntas. Sigue estas instrucciones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;«Choose a provider»&lt;/strong&gt; → Escribe &lt;strong&gt;Ollama&lt;/strong&gt; y presiona Enter 2. &lt;strong&gt;«Choose mode»&lt;/strong&gt; → Si quieres que funcione solo en tu computador sin internet, elige &lt;strong&gt;Local only&lt;/strong&gt;. Si quieres tener la opción de usar modelos en la nube como respaldo, elige &lt;strong&gt;Cloud + Local&lt;/strong&gt; (luego te explica qué significa) 3. El asistente va a detectar el modelo que descargaste en el Paso 2. Confírmalo con Enter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Si te pide una API key para Ollama Cloud&lt;/strong&gt; (solo en modo Cloud): Necesitas crear una cuenta gratis en &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;ollama.com&lt;/a&gt; y copiar la API key de tu perfil.&lt;/p&gt;

&lt;h4&gt;
  
  
  Verifica que Todo Está Bien
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;openclaw gateway status&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si dice que está «running» o «listening», &lt;strong&gt;todo funciona&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 5: Habla con Tu Agente (1 minuto)
&lt;/h3&gt;

&lt;p&gt;En la Terminal, pega:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;openclaw dashboard&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto va a abrir una página en tu navegador con una pantalla de chat.&lt;/p&gt;

&lt;p&gt;Escribe algo como &lt;em&gt;»Hola, ¿quién eres?»&lt;/em&gt; y… debería responderte.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Si respondió:&lt;/strong&gt; Felicidades  Tienes tu primer agente de IA local funcionando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Si no respondió:&lt;/strong&gt; Mira la sección de problemas comunes abajo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 6: (Opcional) Habla con Tu Agente Desde el Celular
&lt;/h3&gt;

&lt;p&gt;Esto es lo que hace que valga la pena. Hablarle a tu agente desde WhatsApp o Telegram.&lt;/p&gt;

&lt;h4&gt;
  
  
  La Forma Más Fácil: Telegram
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Abre Telegram y busca &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;&lt;/strong&gt; 2. Escríbele &lt;code&gt;/newbot&lt;/code&gt; 3. Te va a pedir un nombre para tu bot (ej: «Mi Asistente») 4. Luego te pide un username (debe terminar en «bot», ej: «mi_asistente_ia_bot») 5. &lt;strong&gt;BotFather te da un token&lt;/strong&gt; — es una cadena larga de letras y números. Guárdalo. 6. En tu Terminal, pega estos dos comandos (reemplazando TU_TOKEN por lo que te dio BotFather):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw config &lt;span class="nb"&gt;set &lt;/span&gt;channels.telegram.botToken &lt;span class="s2"&gt;"TU_TOKEN_AQUI"&lt;/span&gt;
openclaw config &lt;span class="nb"&gt;set &lt;/span&gt;channels.telegram.dmPolicy &lt;span class="s2"&gt;"open"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Y reinicia:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;openclaw gateway restart&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora busca tu bot en Telegram y envíale un mensaje. Te va a responder &lt;/p&gt;

&lt;h3&gt;
  
  
  Problemas Comunes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;«Model not found»&lt;/strong&gt; → El modelo no se descargó bien. Ejecuta de nuevo: &lt;code&gt;ollama pull qwen3.5:27b&lt;/code&gt; (o el modelo que hayas elegido).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No sé si tengo suficiente RAM&lt;/strong&gt; → Si tu computador tiene 8GB o más, va a funcionar. Si tiene menos de 8GB, va a ser muy lento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El agente no responde&lt;/strong&gt; → Ejecuta &lt;code&gt;openclaw logs&lt;/code&gt; y busca errores (palabras en rojo o que digan «error»). Si no puedes resolverlo, &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;pregunta en el Discord de OpenClaw&lt;/a&gt; — la comunidad es buena onda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Va muy lento&lt;/strong&gt; → El modelo es muy grande para tu computador. Descarga uno más pequeño: – &lt;code&gt;ollama pull qwen3.5:7b&lt;/code&gt; (solo 4GB) – Y cambia el modelo en config: &lt;code&gt;openclaw config set agents.defaults.model.primary «ollama/qwen3.5:7b»&lt;/code&gt; –  Antes de cambiar, &lt;a href="https://benchmarks.cristiantala.com/" rel="noopener noreferrer"&gt;revisa la calculadora de modelos&lt;/a&gt; — ahí ves la latencia real y velocidad de cada modelo&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Y Ahora Qué?
&lt;/h3&gt;

&lt;p&gt;Ahora tienes un agente de IA que:&lt;/p&gt;

&lt;p&gt;– Responde preguntas sin enviar datos a ningún servidor – Puedes hablarle desde tu teléfono – Es gratis para siempre&lt;/p&gt;

&lt;p&gt;Pero esto es &lt;strong&gt;solo el comienzo&lt;/strong&gt;. Tu agente puede hacer mucho más:&lt;/p&gt;

&lt;p&gt;–  &lt;strong&gt;Buscar en internet&lt;/strong&gt; en tiempo real –  &lt;strong&gt;Trabajar con tus archivos&lt;/strong&gt; — leer, escribir, editar –  &lt;strong&gt;Entender imágenes&lt;/strong&gt; (si descargas un modelo que soporte imágenes) –  &lt;strong&gt;Ejecutar comandos&lt;/strong&gt; en tu computador –  &lt;strong&gt;Recordar&lt;/strong&gt; cosas que le dices entre conversaciones&lt;/p&gt;

&lt;p&gt;Si quieres automatizar flujos más complejos (como que revise tu email todos los días y te mande un resumen por WhatsApp), puedes conectar OpenClaw con &lt;strong&gt;&lt;a href="https://n8n.io?via=cristian" rel="noopener noreferrer"&gt;n8n&lt;/a&gt;&lt;/strong&gt; — una plataforma de automatización que te permite crear flujos visuales sin código.&lt;/p&gt;

&lt;p&gt;Y si quieres aprender más y compartir configuraciones con otras personas, &lt;strong&gt;únete a mi comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite/about" rel="noopener noreferrer"&gt;Cágala, Aprende, Repite&lt;/a&gt;&lt;/strong&gt; — ahí hablamos de IA, automatización y cómo hacer que la tecnología trabaje para ti.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recursos y Herramientas
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Calculadora de Modelos IA
&lt;/h4&gt;

&lt;p&gt;Si no sabes qué modelo elegir para tu caso, usa la &lt;a href="https://benchmarks.cristiantala.com/" rel="noopener noreferrer"&gt;calculadora interactiva de modelos de inteligencia artificial&lt;/a&gt; que armé con &lt;strong&gt;91 tests reales contra decenas de modelos&lt;/strong&gt;. Le dices tu presupuesto mensual, cuántas requests esperas, qué calidad mínima necesitas, y te recomienda el modelo ideal — sea alternativa a Claude, ChatGPT, o para correr local con Ollama. Los datos vienen del &lt;a href="https://benchmarks.cristiantala.com/" rel="noopener noreferrer"&gt;benchmark v2.3 de abril 2026&lt;/a&gt; y se actualizan con cada nuevo lote de tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filtros disponibles:&lt;/strong&gt; –  Presupuesto mensual –  Velocidad mínima (tokens por segundo) –  Calidad mínima requerida –  Solo open-source –  Tool calling para agentes (N8N, OpenClaw) –  Alternativas a Claude, ChatGPT o Gemini –  Modelos económicos para emprendedores&lt;/p&gt;

&lt;h4&gt;
  
  
  Documentación
&lt;/h4&gt;

&lt;p&gt;– &lt;a href="https://docs.openclaw.ai" rel="noopener noreferrer"&gt;Documentación completa de OpenClaw&lt;/a&gt; — instalación, configuración, canales, herramientas – &lt;a href="https://ollama.com/search" rel="noopener noreferrer"&gt;Todos los modelos disponibles en Ollama&lt;/a&gt; — catálogo oficial – &lt;a href="https://github.com/openclaw/openclaw" rel="noopener noreferrer"&gt;Repositorio de OpenClaw en GitHub&lt;/a&gt; – &lt;a href="https://github.com/ctala/ai-benchmarks-alternativos/blob/main/README.md#metodologia" rel="noopener noreferrer"&gt;Metodología del benchmark de modelos IA&lt;/a&gt; — cómo se evalúan los 91 tests – &lt;a href="https://discord.com/invite/clawd" rel="noopener noreferrer"&gt;Comunidad de OpenClaw en Discord&lt;/a&gt; — soporte y preguntas&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://cristiantala.com/tu-primer-agente-de-ia-local-con-openclaw-ollama-guia-para-principiantes/" rel="noopener noreferrer"&gt;Tu Primer Agente de IA Local con OpenClaw + Ollama: Guía para Principiantes&lt;/a&gt; appeared first on &lt;a href="https://cristiantala.com" rel="noopener noreferrer"&gt;Cristian Tala Sánchez&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Este articulo fue publicado originalmente en &lt;a href="https://cristiantala.com/tu-primer-agente-de-ia-local-con-openclaw-ollama-guia-para-principiantes/?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;cristiantala.com&lt;/a&gt;. Si te interesa emprendimiento, IA y automatizacion, unite gratis a la comunidad &lt;a href="https://www.skool.com/cagala-aprende-repite?utm_source=devto&amp;amp;utm_medium=syndication" rel="noopener noreferrer"&gt;Cagala, Aprende, Repite&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>uncategorized</category>
    </item>
  </channel>
</rss>
