{
  "slug": "airtable-to-nocodb",
  "title": "Airtable Team to self-hosted NocoDB",
  "summary": "NocoDB puts an Airtable-shaped interface on a Postgres database you own. Per-seat pricing is what makes this one work.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Airtable",
    "vendor_id": "airtable",
    "plan": "Team",
    "plan_id": "team",
    "amount": 20,
    "period": "month",
    "per_seat": true,
    "billed": "annual",
    "seats": 5,
    "quote": "our Team plan is available for $20/user/month when billed annually",
    "caveat": null,
    "source_url": "https://airtable.com/pricing",
    "verified_at": "2026-10-19",
    "needs_reverification": false
  },
  "alternative": {
    "name": "NocoDB (self-hosted)",
    "repo": "nocodb/nocodb",
    "project": {
      "full_name": "nocodb/nocodb",
      "url": "https://github.com/nocodb/nocodb",
      "homepage": "https://nocodb.com",
      "description": "🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative",
      "stars": 65293,
      "forks": 5094,
      "open_issues": 714,
      "license": null,
      "archived": false,
      "pushed_at": "2026-10-19T10:46:33Z",
      "days_since_push": 0,
      "latest_release": {
        "tag": "2026.09.1",
        "published_at": "2026-09-29T14:39:07Z",
        "url": "https://github.com/nocodb/nocodb/releases/tag/2026.09.1"
      },
      "days_since_release": 20,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:44.853Z"
    },
    "box": {
      "provider": "Vultr",
      "name": "vc2-1c-2gb",
      "id": "vultr:vc2-1c-2gb",
      "vcpu": 1,
      "ram_gb": 2,
      "disk_gb": 55,
      "bandwidth_tb": 2,
      "monthly_usd": 10,
      "url": "https://www.vultr.com/pricing/",
      "verified_at": "2026-10-19T10:53:42.716Z"
    },
    "storage": {
      "id": "backblaze-b2",
      "name": "Backblaze B2",
      "usd_per_gb_month": 0.00695,
      "egress": "free up to 3x stored volume per month, then $0.01/GB",
      "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
      "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
      "verified_at": "2026-09-03",
      "verified_by": "human",
      "affiliate": true,
      "gb": 25,
      "monthly_usd": 0.17
    },
    "requirements": {
      "ram_gb": 2,
      "vcpu": 1,
      "disk_gb": 25
    },
    "box_alternatives": [
      {
        "provider": "Vultr",
        "name": "vc2-1c-2gb",
        "monthly_usd": 10,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 55,
        "url": "https://www.vultr.com/pricing/",
        "chosen": true
      },
      {
        "provider": "Linode",
        "name": "Linode 2GB",
        "monthly_usd": 12,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 50,
        "url": "https://www.linode.com/pricing/",
        "chosen": false
      },
      {
        "provider": "DigitalOcean",
        "name": "1 vCPU · 2 GB",
        "monthly_usd": 12,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 50,
        "url": "https://www.digitalocean.com/pricing/droplets",
        "chosen": false
      }
    ],
    "migration_hours": 6,
    "maintenance_hours_per_month": 0.5
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 5,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 100,
      "time_monthly": 0,
      "monthly": 100,
      "one_time": 0,
      "annual": 1200
    },
    "alternative": {
      "cash_monthly": 10.17,
      "time_monthly": 25,
      "monthly": 35.17,
      "one_time": 300,
      "cash_one_time": 0,
      "time_one_time": 300,
      "annual": 422.09
    },
    "delta": {
      "monthly": 64.83,
      "upfront_to_switch": 300,
      "annual": 777.92
    },
    "break_even_month": 5,
    "break_even_hourly_rate": 134.74,
    "totals": {
      "at_12_months": {
        "incumbent": 1200,
        "alternative": 722.09
      },
      "at_36_months": {
        "incumbent": 3600,
        "alternative": 1566.26
      },
      "at_horizon": {
        "incumbent": 3600,
        "alternative": 1566.26
      }
    },
    "savings": {
      "year_1": 477.91,
      "year_3": 2033.74,
      "at_horizon": 2033.74
    },
    "verdict": "switch"
  },
  "managed": {
    "provider": "PikaPods",
    "app": "NocoDB",
    "url": "https://www.pikapods.com/",
    "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
    "source_url": "https://www.pikapods.com/apps",
    "quote": "NocoDB An open source … Run Your Own From $3.1/month",
    "monthly_usd": 3.1,
    "verified_at": "2026-10-19T10:54:00.624Z",
    "migration_hours": 3,
    "result": {
      "computable": true,
      "inputs": {
        "seats": 5,
        "horizon_months": 36,
        "hourly_rate": 50
      },
      "incumbent": {
        "cash_monthly": 100,
        "time_monthly": 0,
        "monthly": 100,
        "one_time": 0,
        "annual": 1200
      },
      "alternative": {
        "cash_monthly": 3.1,
        "time_monthly": 0,
        "monthly": 3.1,
        "one_time": 150,
        "cash_one_time": 0,
        "time_one_time": 150,
        "annual": 37.2
      },
      "delta": {
        "monthly": 96.9,
        "upfront_to_switch": 150,
        "annual": 1162.8
      },
      "break_even_month": 2,
      "break_even_hourly_rate": 1162.8,
      "totals": {
        "at_12_months": {
          "incumbent": 1200,
          "alternative": 187.2
        },
        "at_36_months": {
          "incumbent": 3600,
          "alternative": 261.6
        },
        "at_horizon": {
          "incumbent": 3600,
          "alternative": 261.6
        }
      },
      "savings": {
        "year_1": 1012.8,
        "year_3": 3338.4,
        "at_horizon": 3338.4
      },
      "verdict": "switch"
    },
    "crossover": 1162.8
  },
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 300
    },
    {
      "month": 1,
      "incumbent": 100,
      "alternative": 335.17
    },
    {
      "month": 2,
      "incumbent": 200,
      "alternative": 370.34
    },
    {
      "month": 3,
      "incumbent": 300,
      "alternative": 405.51
    },
    {
      "month": 4,
      "incumbent": 400,
      "alternative": 440.68
    },
    {
      "month": 5,
      "incumbent": 500,
      "alternative": 475.85
    },
    {
      "month": 6,
      "incumbent": 600,
      "alternative": 511.02
    },
    {
      "month": 7,
      "incumbent": 700,
      "alternative": 546.19
    },
    {
      "month": 8,
      "incumbent": 800,
      "alternative": 581.36
    },
    {
      "month": 9,
      "incumbent": 900,
      "alternative": 616.53
    },
    {
      "month": 10,
      "incumbent": 1000,
      "alternative": 651.7
    },
    {
      "month": 11,
      "incumbent": 1100,
      "alternative": 686.87
    },
    {
      "month": 12,
      "incumbent": 1200,
      "alternative": 722.04
    },
    {
      "month": 13,
      "incumbent": 1300,
      "alternative": 757.21
    },
    {
      "month": 14,
      "incumbent": 1400,
      "alternative": 792.38
    },
    {
      "month": 15,
      "incumbent": 1500,
      "alternative": 827.55
    },
    {
      "month": 16,
      "incumbent": 1600,
      "alternative": 862.72
    },
    {
      "month": 17,
      "incumbent": 1700,
      "alternative": 897.89
    },
    {
      "month": 18,
      "incumbent": 1800,
      "alternative": 933.06
    },
    {
      "month": 19,
      "incumbent": 1900,
      "alternative": 968.23
    },
    {
      "month": 20,
      "incumbent": 2000,
      "alternative": 1003.4
    },
    {
      "month": 21,
      "incumbent": 2100,
      "alternative": 1038.57
    },
    {
      "month": 22,
      "incumbent": 2200,
      "alternative": 1073.74
    },
    {
      "month": 23,
      "incumbent": 2300,
      "alternative": 1108.91
    },
    {
      "month": 24,
      "incumbent": 2400,
      "alternative": 1144.08
    },
    {
      "month": 25,
      "incumbent": 2500,
      "alternative": 1179.25
    },
    {
      "month": 26,
      "incumbent": 2600,
      "alternative": 1214.42
    },
    {
      "month": 27,
      "incumbent": 2700,
      "alternative": 1249.59
    },
    {
      "month": 28,
      "incumbent": 2800,
      "alternative": 1284.76
    },
    {
      "month": 29,
      "incumbent": 2900,
      "alternative": 1319.93
    },
    {
      "month": 30,
      "incumbent": 3000,
      "alternative": 1355.1
    },
    {
      "month": 31,
      "incumbent": 3100,
      "alternative": 1390.27
    },
    {
      "month": 32,
      "incumbent": 3200,
      "alternative": 1425.44
    },
    {
      "month": 33,
      "incumbent": 3300,
      "alternative": 1460.61
    },
    {
      "month": 34,
      "incumbent": 3400,
      "alternative": 1495.78
    },
    {
      "month": 35,
      "incumbent": 3500,
      "alternative": 1530.95
    },
    {
      "month": 36,
      "incumbent": 3600,
      "alternative": 1566.12
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 3233.74
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 2,
      "savings_at_horizon": 2633.75
    },
    {
      "hourly_rate": 50,
      "verdict": "switch",
      "break_even_month": 5,
      "savings_at_horizon": 2033.74
    },
    {
      "hourly_rate": 75,
      "verdict": "switch",
      "break_even_month": 9,
      "savings_at_horizon": 1433.74
    },
    {
      "hourly_rate": 100,
      "verdict": "switch",
      "break_even_month": 16,
      "savings_at_horizon": 833.74
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": 61,
      "savings_at_horizon": -366.26
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -1566.26
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Airtable's automations and scripting block — NocoDB's equivalents are thinner",
      "The interface designer and published interfaces",
      "A large marketplace of extensions and templates"
    ],
    "you_gain": [
      "A real Postgres database underneath, queryable with SQL by anything you own",
      "No record limits per base",
      "Free seats, which is the entire argument for teams above about four people"
    ]
  },
  "caveats": [
    "NocoDB has a direct Airtable import, which is why the migration estimate is low. Verify formula fields after import — they are the part that most often does not survive.",
    "Attachment-heavy bases need more disk and more backup volume than the defaults here."
  ],
  "category": "database-spreadsheet",
  "updated_at": "2026-10-19"
}