# @ryanforever/airtable

> airtable API

Latest version **2.0.0** (published 2026-02-03) · ISC license · 0 weekly downloads

## Install

```sh
npm install @ryanforever/airtable
pnpm add @ryanforever/airtable
yarn add @ryanforever/airtable
bun add @ryanforever/airtable
```

## Health

**Score 45/100 (D)** — status: stable.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2026-02-03 |
| First published | 2022-08-10 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 7 |
| Unpacked size | 693.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | ryan forever |
| Maintainers | ryanforever |
| Keywords | airtable, api |

## Links

- npm: https://www.npmjs.com/package/@ryanforever/airtable
- Repository: https://github.com/ryanfarber/airtable
- Homepage: https://github.com/ryanfarber/airtable#readme
- Issues: https://github.com/ryanfarber/airtable/issues
- npm.io page: https://npm.io/package/@ryanforever/airtable

## Dependencies (7)

- [axios](https://npm.io/package/axios.md) ^1.13.4
- [kind-of](https://npm.io/package/kind-of.md) ^6.0.3
- [p-queue](https://npm.io/package/p-queue.md) ^6.6.2
- [airtable](https://npm.io/package/airtable.md) ^0.12.2
- [underscore](https://npm.io/package/underscore.md) ^1.13.7
- [async-await-queue](https://npm.io/package/async-await-queue.md) ^2.1.4
- [@ryanforever/logger](https://npm.io/package/@ryanforever/logger.md) ^6.0.13

## Alternatives

- [@lexical/table](https://npm.io/package/@lexical/table.md) — 3.0M weekly downloads
- [mantine-datatable](https://npm.io/package/mantine-datatable.md) — 98.2K weekly downloads
- [react-native-collapsible-tab-view](https://npm.io/package/react-native-collapsible-tab-view.md) — 70.6K weekly downloads
- [@handsontable/vue3](https://npm.io/package/@handsontable/vue3.md) — 16.1K weekly downloads
- [vuewordcloud](https://npm.io/package/vuewordcloud.md) — 7.2K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2026-02-03
- 1.2.130 — 2026-02-03
- 1.2.129 — 2025-08-04
- 1.2.127 — 2025-08-04
- 1.2.125 — 2025-08-04
- 1.2.122 — 2025-08-04
- 1.2.121 — 2025-08-04
- 1.2.120 — 2025-08-04
- 1.2.119 — 2025-08-04
- 1.2.118 — 2025-08-04
- 1.2.117 — 2025-08-04
- 1.2.116 — 2025-08-04
- 1.2.115 — 2025-08-04
- 1.2.114 — 2025-08-04
- 1.2.113 — 2025-08-04
- … 135 more at https://npm.io/package/@ryanforever/airtable/versions

## README

# airtable
Airtable API wrapper with some extra methods



## usage
```javascript
const Airtable = require("@ryanforever/airtable")
const airtable = new Airtable({
    key: process.env.AIRTABLE_KEY,
    baseId: process.env.DOLLARSONG_BASE_ID,
})

airtable.create("Users", {
    name: "hello world",
    age: 25
})
```


## methods
```javascript
// with table name in config
const Airtable = require("@ryanforever/airtable")
const airtable = new Airtable({
    key: process.env.AIRTABLE_KEY,
    baseId: process.env.AIRTABLE_BASE_ID
})
```


## upsert records
Will create if record does not exist, and update if does exist, based on the fields specified as `fields`
```javascript
await airtable.upsert({
    table: "My Table",  // name of table you want to upsert in
    fields: ["id"],     // field(s) to match
    records: [
        { id: "abc123", name: "ryan forever" }
    ]
})
```

## update records
```javascript
await airtable.update("My Table", [
    {
        id: "recxVksa5oZdLKPTY", 
        fields: {
            name: "ryan forever", 
            age: 21
        }
    }
])
```



## create a schema of your entire base
`.createBaseSchema()` Automatically creates a comprehensive overview of all the tables/fields/relationships in a base. This method will create a new table in your base.

```javascript
await airtable.createBaseSchema()

// with options
await airtable.createBaseSchema({
    tableName: "Base Schema", // name of the table you want to create. default is base_schema
    description: "This is the schema of this base" // description will be added to this table
})
```


## create fields in a table programatically
you can use `.inferFieldTypesFromObj()` to get the airtable field names of a given object

```javascript
// you have an object which you want to get the field types for
let obj = {
    name: "ryan forever",
    age: 23,
    birthday: "1991-08-23T07:00:00.000Z",
    likes: ["apples", "cats", "sushi"],
    active: true
}

let fields = airtable.inferFieldTypesFromObj(obj)

/* 
outputs an array with formatted airtable field schemas
[
  { name: 'name', type: 'singleLineText' },
  { name: 'age', type: 'number' },
  { name: 'birthday', type: 'dateTime' },
  { name: 'likes', type: 'multipleSelects' },
  { name: 'active', type: 'checkbox' }
]
*/

// create the fields in airtable
await airtable.createFields("My Table", fields)

---
_Source: https://npm.io/package/@ryanforever/airtable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
