Loading...
Loading...
Access Airtable bases, tables, and records. Use when user mentions Airtable, bases, tables, records, or spreadsheet data. Uses Python pyairtable library for clean, reliable access.
npx skill4agent add asu-le/claude-plugins airtablepython3 --version 2>/dev/null || echo "NOT_INSTALLED"brew install python3sudo apt-get install python3 python3-pippython3 -c "import pyairtable; print(pyairtable.__version__)" 2>/dev/null || echo "NOT_INSTALLED"pip3 install pyairtableecho "AIRTABLE_API_KEY=${AIRTABLE_API_KEY:+SET}"Airtable is not configured yet. Let me help you set it up.Step 1: Get your Airtable Personal Access Token
- Go to https://airtable.com/create/tokens
- Click "Create new token"
- Name it "Claude Assistant"
- Add scopes:
(to read records)data.records:read (optional - to create/update)data.records:write (to see base structure)schema.bases:read- Add access to the bases you want
- Click "Create token" and copy it (starts with
)pat...Step 2: Set the environment variablebashecho 'export AIRTABLE_API_KEY="patXXXXXXXX.XXXXXXX"' >> ~/.zshrc source ~/.zshrcStep 3: Restart Claude Code and come back
python3 -cimport os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
for base in api.bases():
print(f'{base.id}: {base.name}')
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
base = api.base('BASE_ID')
for table in base.tables():
print(f'\n{table.name}:')
for field in table.schema().fields:
print(f' - {field.name} ({field.type})')
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
for record in table.all():
print(record['fields'])
"python3 -c "
import os
from pyairtable import Api
from pyairtable import formulas as F
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
# Filter by field value
records = table.all(formula=F.match({'Status': 'Active'}))
for r in records:
print(r['fields'])
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
# Search with SEARCH formula
records = table.all(formula=\"SEARCH('SEARCH_TERM', {FieldName})\")
for r in records:
print(r['fields'])
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
record = table.get('RECORD_ID')
print(record['fields'])
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
record = table.create({'Name': 'New Item', 'Status': 'Active'})
print(f\"Created: {record['id']}\")
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
table.update('RECORD_ID', {'Status': 'Completed'})
print('Updated')
"python3 -c "
import os
from pyairtable import Api
api = Api(os.environ['AIRTABLE_API_KEY'])
table = api.table('BASE_ID', 'TABLE_NAME')
records = table.batch_create([
{'Name': 'Item 1'},
{'Name': 'Item 2'},
{'Name': 'Item 3'}
])
print(f'Created {len(records)} records')
"| User says... | Action |
|---|---|
| "Show my bases" | List all bases |
| "What tables are in [base]?" | Get base schema |
| "Show records from [table]" | List records |
| "Find [value] in [table]" | Filter with formula |
| "Create a record in [table]" | Create (ask permission first) |
| "Update [record]" | Update (ask permission first) |
Records in Tasks:
┌──────────────────┬──────────┬────────────┐
│ Name │ Status │ Due Date │
├──────────────────┼──────────┼────────────┤
│ Review proposal │ Active │ Jan 20 │
│ Send report │ Done │ Jan 18 │
└──────────────────┴──────────┴────────────┘[{"id":"rec123","fields":{"Name":"Review proposal"...