erDiagram
entity "Google Sheets" {
Campaigns "Flat list"
Offers "Flat list"
Performance "Flat list"
--
No relationships
Manual vlookup
Error-prone
}
entity "Airtable" {
Campaigns "Table"
Offers "Table"
Performance "Table"
--
Linked records
Rollup fields
Automatic calculations
}
Campaigns ||--o{ Offers : "has many"
Campaigns ||--o{ Performance : "has stats"
| Feature | Google Sheets | Airtable |
|---|---|---|
| Structure | Flat (one tab = one table) | Relational (linked tables) |
| Connections | vlookup formulas | Linked record fields |
| Calculations | Manual formulas | Rollup fields (automatic) |
You know Sheets already. Airtable is the same data, structured properly.
erDiagram
entity "Campaigns Table" {
Campaign Name: Text
Start Date: Date
Status: Single Select
--
Offers: Link to Offers
Performance: Link to Performance
}
entity "Offers Table" {
Offer Name: Text
Offer Type: Single Select
Revenue: Currency
--
Campaign: Link to Campaigns
Performance: Link to Performance
}
entity "Performance Table" {
Date: Date
Clicks: Number
Revenue: Currency
Fatigue Score: Formula
--
Campaign: Link to Campaigns
Offer: Link to Offers
}
Campaigns ||--o{ Offers : "has"
Campaigns ||--o{ Performance : "tracks"
Offers ||--o{ Performance : "measures"
Each table links to others. Click into a campaign, see all its offers and performance automatically.
Move from Google Sheets to Airtable for relational power.
# Python script to transform Sheets data for Airtable
import csv
import json
def transform_for_airtable(sheets_csv, table_name):
"""Convert flat Sheets export to Airtable-ready JSON"""
with open(sheets_csv, 'r') as file:
reader = csv.DictReader(file)
records = []
for row in reader:
# Airtable expects specific field names
record = {
'fields': {
'Campaign Name': row.get('campaign_name'),
'Revenue': float(row.get('revenue', 0)),
'Clicks': int(row.get('clicks', 0))
}
}
records.append(record)
return json.dumps(records, indent=2)
# Use with Claude Code:
# "Transform my looker_export.csv for Airtable import"
Same concepts as AWeber/HubSpot API calls you already know.
// Airtable API call (similar to what you did with AWeber API)
const apiKey = 'keyXXXXXXX';
const baseId = 'appXXXXXXXX';
const tableName = 'Campaigns';
const response = await fetch(`https://api.airtable.com/v0/${baseId}/${tableName}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
'fields': {
'Campaign Name': 'Spring Sale',
'Offer': ['rec123456'], // Linked record ID
'Revenue': 5000
}
})
});
const data = await response.json();
console.log('Created:', data);
Same HTTP methods (GET, POST) as Make.com HTTP module. Just different base URL and auth header.
Goal: Move your Looker export tracking from Sheets to Airtable
Claude Code Prompt:
"Teach me to build this Airtable base step-by-step:
1. Schema for 3 tables with linked fields
2. Rollup formula for total revenue
3. View for RPE > $0.50
4. Form for manual entry
Use my current Sheets tracker as reference."