pyAirtable Python SDK
raw JSON → 3.3.0 verified Tue May 12 auth: no python install: verified quickstart: stale
Official community Python client for the Airtable API. Formerly known as airtable-python-wrapper. Current version is 3.3.0 (Nov 2025). Has gone through major rewrites at 1.0, 2.0, and 3.0 — each with breaking changes. Many tutorials still reference the old airtable-python-wrapper package which is abandoned.
pip install pyairtable Common errors
error ModuleNotFoundError: No module named 'airtable' OR ImportError: cannot import name 'Airtable' from 'airtable' ↓
cause You are trying to import the deprecated `airtable-python-wrapper` library, or you have `pyairtable` installed but are using the old import syntax.
fix
Ensure
pyairtable is installed (pip install pyairtable) and update your import statements to use from pyairtable import Api or from pyairtable import Table. error AttributeError: 'Table' object has no attribute 'get_all' ↓
cause The method `get_all()` was part of the older `airtable-python-wrapper` or earlier `pyairtable` versions; it has been renamed or replaced in newer `pyairtable` releases (e.g., by `all()` or `each()`).
fix
Replace
table.get_all() with table.all() to retrieve all records or table.each() for an iterator, and update other method calls according to the current pyairtable API documentation. error HTTP 401 Unauthorized OR HTTP 403 Forbidden ↓
cause Your Airtable API key or Personal Access Token (PAT) is invalid, missing, or lacks the necessary permissions for the requested operation or base.
fix
Verify that your API key/PAT is correct, has the required scopes (e.g.,
data.records:read for reading), and that you are using a Personal Access Token (API keys are deprecated). Ensure it's passed correctly, e.g., api = Api('YOUR_PAT') or via os.environ['AIRTABLE_API_KEY']. error TypeError: Table() takes X positional arguments but Y were given ↓
cause The constructor signature for `pyairtable.Table` or `pyairtable.Api` has changed in a breaking release (e.g., from 1.x to 2.x or 2.x to 3.x), leading to an incorrect number of arguments being passed.
fix
Consult the
pyairtable migration guide for your specific version change and update the Table or Api constructor calls. For pyairtable 2.0+, Table is typically instantiated as Table(api_instance, base_id, table_name) or api.table(base_id, table_name). Warnings
breaking Airtable deprecated legacy API keys in January 2024. They no longer work. All code using api_key='key...' strings will fail with 401. ↓
fix Generate a Personal Access Token at airtable.com/create/tokens and use that instead. Scopes must be explicitly granted per base.
breaking airtable-python-wrapper is the old abandoned package. Package name changed to pyairtable at 1.0.0. Installing airtable-python-wrapper gives you dead code. ↓
fix pip install pyairtable — not airtable or airtable-python-wrapper.
breaking Pydantic 1.x support dropped in pyairtable 3.x. Will fail to import if Pydantic 1.x is installed. ↓
fix pip install 'pydantic>=2.0'
breaking Table(api_key, base_id, table_name) constructor with raw strings deprecated in 2.0, raises TypeError in 3.0. Most tutorials and LLM-generated code still use this pattern. ↓
fix api = Api(token); table = api.table(base_id, table_name)
breaking pyairtable.metadata module removed in 3.0. Any code importing from it will fail. ↓
fix Use api.base(base_id).schema() for metadata access.
gotcha Model.save() return type changed from bool to SaveResult in 3.x. Code checking 'if record.save():' will break silently — SaveResult is always truthy. ↓
fix Check SaveResult.created or SaveResult.updated explicitly.
gotcha return_fields_by_field_id= parameter renamed to use_field_ids= in 3.x. ↓
fix Replace return_fields_by_field_id=True with use_field_ids=True.
deprecated Python 3.9 support dropped in 3.3.0 (Nov 2025). ↓
fix Use Python 3.10+.
breaking Airtable API returned 404 Not Found. This typically indicates an incorrect Base ID or Table Name in your configuration, or that the specified base/table does not exist or is not accessible with the provided token. ↓
fix Verify that the BASE_ID and TABLE_NAME used in your code are correct and correspond to an existing Airtable base and table. Ensure the Personal Access Token has appropriate scopes and permissions to access the specified base and table.
Install
pip install pyairtable[cli] Install compatibility verified last tested: 2026-05-12
python os / libc variant status wheel install import disk
3.10 alpine (musl) pyairtable - - 1.78s 32.0M
3.10 alpine (musl) cli - - 1.75s 32.8M
3.10 slim (glibc) pyairtable - - 1.27s 32M
3.10 slim (glibc) cli - - 1.27s 32M
3.11 alpine (musl) pyairtable - - 2.38s 35.1M
3.11 alpine (musl) cli - - 2.32s 36.0M
3.11 slim (glibc) pyairtable - - 1.98s 35M
3.11 slim (glibc) cli - - 1.92s 36M
3.12 alpine (musl) pyairtable - - 2.19s 26.6M
3.12 alpine (musl) cli - - 2.16s 27.5M
3.12 slim (glibc) pyairtable - - 2.18s 26M
3.12 slim (glibc) cli - - 2.20s 27M
3.13 alpine (musl) pyairtable - - 1.69s 26.2M
3.13 alpine (musl) cli - - 1.67s 27.1M
3.13 slim (glibc) pyairtable - - 1.73s 26M
3.13 slim (glibc) cli - - 1.71s 27M
3.9 alpine (musl) pyairtable - - 1.70s 31.4M
3.9 alpine (musl) cli - - 1.63s 32.1M
3.9 slim (glibc) pyairtable - - 1.50s 31M
3.9 slim (glibc) cli - - 1.50s 32M
Imports
- Api wrong
from airtable import Airtablecorrectfrom pyairtable import Api - Table wrong
Table(api_key, base_id, table_name)correctapi = Api(api_key); table = api.table(base_id, table_name)
Quickstart stale last tested: 2026-05-12
from pyairtable import Api
api = Api('YOUR_PERSONAL_ACCESS_TOKEN') # not API key — deprecated
table = api.table('BASE_ID', 'TABLE_NAME')
# fetch all records
records = table.all()
# create a record
table.create({'Name': 'New Row', 'Status': 'Active'})