How to Use Coda for Developers

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.

Table of Contents

1. Set up a Coda doc and developer environment

1.1 Create a free Coda account

Go to coda.io and sign up with Google or email. After verification, click “New Doc” and choose “Blank”. Name it Dev Playground.

1.2 Enable Packs development

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.

Coda Packs IDE screenshot
Figure 1: Opening the Pack IDE.

1.3 Install local tools (optional)

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.

2. Connect an external API to a Coda table

2.1 Choose an API

For this tutorial we use the public JSONPlaceholder posts endpoint. It returns dummy blog posts in JSON.

2.2 Create a table

In the doc, click “+” → Table → “Add Table”. Name it Posts and add columns:

2.3 Pull data with a formula

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.

3. Build a custom Pack with JavaScript

3.1 Scaffold the Pack

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;
  },
});

3.2 Test the formula

Click “Run” → choose GetPost → enter 1. The IDE shows the JSON object. Save and “Publish” the pack to make it available in your doc.

3.3 Use the pack in the 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.

4. Create automations and webhooks

4.1 Automation: Notify Slack on new rows

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.

4.2 Webhook: Receive GitHub commits

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.

5. Embed the doc in a website

5.1 Get the embed code

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>

5.2 Responsive wrapper

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>

6. Coda vs. Competitors

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).

FeatureCodaNotionAirtable
Free tier automation runs50/mo100/mo (via Zapier)100/mo
Custom code (Packs)Yes, JS/TSNo native, use APIScripts (JavaScript) in Automation
API rate limit (free)1,000 req/day2,000 req/day (via API)5,000 req/day
Embedded iframe size limitNo limit640px max height800px max height
Data rows per base (free)1,0001,0001,200

FAQ

What is Coda?

Coda is a flexible doc‑platform that blends spreadsheets, databases, and apps into a single collaborative space.

Do I need to know JavaScript to use Coda Packs?

Yes. Packs are built with JavaScript (or TypeScript) and run on Coda’s serverless environment.

Can I trigger Coda actions from GitHub?

Yes. Use Coda’s webhook endpoint or the official GitHub Pack to push commits into a table.

Is there a free tier for developers?

Coda offers a free plan with up to 50 automation runs per month and 2 packs per doc.

How do I debug a Pack?

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.

Get tools like this in your inbox
One useful tool per week. No spam. Unsubscribe anytime.