Coda is a flexible doc‑platform that lets developers build custom tools without leaving the browser. In this guide we walk through creating a simple API‑backed table, automating updates with Coda Packs, and embedding the result in a web page. Follow each step and copy the code blocks to get a working prototype in under an hour.
Go to coda.io and sign up with Google or email. After verification, click “New Doc” and choose “Blank”. Name it Dev Playground.
Open the doc menu → Explore → Packs → Create a Pack. Accept the Terms of Service. Coda will open an online IDE with Node.js 18 runtime.
If you prefer a local editor, run:
npm install -g @codahq/packs-sdk
coda init my-pack
cd my-pack
code .
Run coda run to test the pack locally before publishing.
For this tutorial we use the public JSONPlaceholder posts endpoint. It returns dummy blog posts in JSON.
In the doc, click “+” → Table → “Add Table”. Name it Posts and add columns:
In the first cell of the Title column, enter the formula:
=Fetch("https://jsonplaceholder.typicode.com/posts")
Then wrap it with ParseJSON and ArrayMap to populate rows:
=ArrayMap(
ParseJSON(Fetch("https://jsonplaceholder.typicode.com/posts")),
post,
[post.id, post.title, post.body]
)
After a few seconds the table fills with 100 rows.
In the Pack IDE, replace the starter code with:
import * as coda from "@codahq/packs-sdk";
export const pack = coda.newPack();
pack.addNetworkDomain("jsonplaceholder.typicode.com");
pack.addFormula({
name: "GetPost",
description: "Returns a single post by ID.",
parameters: [
coda.makeParameter({
type: coda.ParameterType.Number,
name: "postId",
description: "ID of the post",
})
],
resultType: coda.ValueType.Object,
schema: coda.makeObjectSchema({
properties: {
id: {type: coda.ValueType.Number},
title: {type: coda.ValueType.String},
body: {type: coda.ValueType.String},
},
displayProperty: "title",
}),
execute: async function ([postId], context) {
let response = await context.fetcher.fetch({
method: "GET",
url: `https://jsonplaceholder.typicode.com/posts/${postId}`,
});
return response.body;
},
});
Click “Run” → choose GetPost → enter 1. The IDE shows the JSON object. Save and “Publish” the pack to make it available in your doc.
Back in the doc, type =GetPost(1) in a cell. The result appears as a rich object. You can reference GetPost(1).title to display just the title.
Open the doc menu → Automations → New Automation. Choose trigger “When row added” on the Posts table. Add action “Send a webhook”. Paste your Slack incoming webhook URL and set the payload:
{
"text": "New post added: {{Title}}"
}
Enable the automation. Now every time you add a row, Slack receives a message.
Create a second table Commits with columns SHA, Message, Author. In Automations, add a trigger “When webhook received”. Copy the generated URL and add it as a GitHub “POST” webhook in your repo settings. Map the JSON fields to table columns using the “Insert values” UI.
Open the doc menu → Share → Embed. Choose “Full width”, set height to 800, and copy the iframe snippet.
<iframe src="https://coda.io/d/Dev-Playground_dXyZ0#Posts" width="100%" height="800" frameborder="0"></iframe>
Wrap the iframe in a responsive container to keep the aspect ratio on mobile:
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;">
<iframe src="https://coda.io/d/Dev-Playground_dXyZ0#Posts"
style="position:absolute;top:0;left:0;width:100%;height:100%;border:none;"
allowfullscreen></iframe>
</div>
Below is a quick side‑by‑side comparison of Coda, Notion, and Airtable for developers. Numbers come from each platform’s public pricing page (2026).
| Feature | Coda | Notion | Airtable |
|---|---|---|---|
| Free tier automation runs | 50/mo | 100/mo (via Zapier) | 100/mo |
| Custom code (Packs) | Yes, JS/TS | No native, use API | Scripts (JavaScript) in Automation |
| API rate limit (free) | 1,000 req/day | 2,000 req/day (via API) | 5,000 req/day |
| Embedded iframe size limit | No limit | 640px max height | 800px max height |
| Data rows per base (free) | 1,000 | 1,000 | 1,200 |
Coda is a flexible doc‑platform that blends spreadsheets, databases, and apps into a single collaborative space.
Yes. Packs are built with JavaScript (or TypeScript) and run on Coda’s serverless environment.
Yes. Use Coda’s webhook endpoint or the official GitHub Pack to push commits into a table.
Coda offers a free plan with up to 50 automation runs per month and 2 packs per doc.
Run the pack in the Coda IDE, use console.log statements, and view logs under “Pack Settings → Logs”.
With these steps you can turn a simple Coda doc into a full‑stack developer tool. Connect APIs, write custom Packs, automate workflows, and embed the result anywhere. Start experimenting today and let Coda handle the plumbing so you can focus on code.