Your data works for you,
not the other way around

Connect messy data, build custom tools, and operate from a single source of truth. How teams can get real leverage over their systems.

Salesforce
Stripe
Maxio
QuickBooks
Customer
Location
Product
Subscription
Invoice
Payment
$725K ARR8 customers5 issues found$2.3K variance
Explore this case study ↓
Raw sources
Salesforce
accounts, opps
Stripe
subs, invoices
Maxio
invoices, revenue
QuickBooks
invoices, payments
sync·resolve·transform
Unified objects
Customer
8 entities · 3 sources
Location
12 locations · 2 sources
Product
6 entities · 2 sources
Subscription
34 entities · 3 sources
Invoice
234 entities · 2 sources
Payment
187 payments · 2 sources

Three systems, six unified objects. Flightdeck syncs the raw data, resolves identities across systems, and produces a model your team can build on.

Y
Build me a revenue explorer. I need ARR broken down by product and by customer, with the ability to toggle between views.
F
I’ll use your Customer, Product, Subscription, and Invoice objects. Here’s your tool:
revenue-explorer

Revenue Explorer

Total ARR
$345.6K
MRR
$28.8K
Products
6
Customers
8
ARR by Product
Member Management
$100.3K
Class Booking
$67.9K
Payment Processing
$53.5K
Access Control
$46.4K
Marketing Suite
$53.8K
Retail POS
$23.7K
ProductCode$/locLocationsMRRARR% Total
Member Management
MBR$19942$8.4K$100.3K29.0%
Class Booking
CLS$14938$5.7K$67.9K19.7%
Payment Processing
PAY$9945$4.5K$53.5K15.5%
Access Control
ACC$12930$3.9K$46.4K13.4%
Marketing Suite
MKT$24918$4.5K$53.8K15.6%
Retail POS
POS$7925$2.0K$23.7K6.9%
Total$28.8K$345.6K100%
Y
Now build me a reconciliation tool. Compare Stripe invoices against QuickBooks. Flag mismatches, missing invoices, and payment gaps.
F
I’ll cross-reference Invoice and Customer objects across both systems. Found 5 issues:
billing-reconciliation

Billing Reconciliation

Stripe vs QuickBooks
Open issues
5
High severity
2
Total variance
$2.3K
Resolved
0/ 5
Balance PilatesINV-2602Feb 2026
Amount MismatchHigh
Payment Processing price increased $99 → $129/loc in January. Stripe reflects new price but QuickBooks still invoicing at old rate.
Stripe$3,156
QuickBooks$2,856
=$300 gap
Summit StrengthINV-2512Dec 2025
Missing InvoiceHigh
December invoice exists in Stripe ($1,508) but is missing entirely from QuickBooks. Payment was collected but never recorded in accounting.
Stripe$1,508
QuickBooksmissing
=$1,508 gap
Iron AthleticsINV-2601Jan 2026
Payment GapMedium
Stripe charge succeeded ($9,300) but QuickBooks shows invoice as unpaid. Payment sync between systems appears to have failed silently.
Stripe$9,300
QuickBooks$9,300
=payment not synced
Zen Yoga CollectiveINV-2603Feb 2026
Amount MismatchMedium
Access Control line item manually edited in QuickBooks: $129 → $64/loc. Looks like someone halved the unit price by hand.
Stripe$4,608
QuickBooks$4,088
=$520 gap
Coastal CrossFitINV-2510Dec 2025
Payment GapLow
Payment recorded in Stripe 3 days before QuickBooks. Timing difference, not a true gap. Auto-resolved on next sync.
Stripe$2,135
QuickBooks$2,135
=payment not synced
Y
Distribute this to the finops team.
F
Done. Here’s what I did:
Published billing-reconciliation tool
Live at tools/billing-reconciliation (auto-refreshes on each sync run).
Granted access to FinOps team in Okta
Added finops-analysts group. 6 members now have access.
Notified #team-finops in Slack
Posted summary: 5 issues found, $2.3K total variance, 2 high-severity items flagged.
Workday
Stripe
LaunchDarkly
Jira
Customer
Employee
TaxConfig
FeatureFlag
Payroll
34 affected847 CA employees8 legacy v1July 1 deadline
Explore this case study ↓
Raw sources
Workday
employees, locations
Stripe
subs, invoices
LaunchDarkly
flags, segments
Jira
issues, sprints
sync·resolve·transform
Unified objects
Customer
142 entities · 2 sources
Employee
8,400 entities · 1 source
TaxConfig
142 entities · 2 sources
FeatureFlag
38 flags · 1 source
Payroll
2,400 cycles · 1 source
CA SB-1147: County-level payroll tax reporting
Employers with 5+ remote workers in California must report payroll taxes at the county level, not just state level. Compliance deadline: July 1.
Claude Code
~/payroll-service
Which customers have 5 or more employees with California work locations?
I’ll query the employee and customer data to find affected customers.
query_entitiesEmployee · work_state = "CA"
query_entitiesCustomer · include: tax_config

Found 847 CA employees across 34 customers:

CustomerCA empCountiesEngine
Meridian Payroll Corp1428v2
Atlas HR Solutions985v2
Pinnacle Staffing674v1
Relay Commerce543v2
Signal Labs413v1
... 29 more445
8 of these 34 customers are on the legacy v1 payroll engine. v1 handles tax calcs differently. Those will need migration tickets.
Generate the feature flag update for the 26 v2 customers. Staged rollout, 5 largest first.
I’ll create a staged rollout config targeting the largest customers first.
query_entitiesCustomer · engine = "v2", order: ca_employees
get_entityFeatureFlag · pk: tax-reporting-level

Staged rollout config for county_level_tax_reporting:

{
"flag": "county_level_tax_reporting",
"stage_1": ["meridian", "atlas_hr", "relay", "coastal_pay", "norcal_hr"],
"stage_2": "remaining 21 v2 customers",
"effective": "2026-07-01"
}
Meridian and Atlas have custom ADP reporting integrations. The county-level output format will need an adapter.
For the 8 v1 customers, create Jira tickets with the specific migration steps and employee counts.
Created 8 Jira tickets in PAYROLL project:
query_entitiesCustomer · engine = "v1", include: employees
PAYROLL-847Migrate Pinnacle Staffing to v2 county-level reporting67 emphigh
PAYROLL-848Migrate Signal Labs to v2 county-level reporting41 emphigh
PAYROLL-849Migrate Summit Workforce to v2 county-level reporting38 empmedium
... and 5 more tickets

Each ticket includes the customer name, employee count, v1→v2 schema delta, and the specific tax calc differences for their county distribution.

opus-4·4.2k tokens·$0.14
What would have been a week of archaeology across four systems became an afternoon coding session. Every flag config, every ticket was grounded in real business data, not boilerplate that needs manual customization.
Salesforce
Stripe
Intercom
Snowflake
Delighted
Cloudbeds
Customer
Subscription
Ticket
Usage
Booking
Property
$268K at risk10 customers3 flaggedhealth < 70
Explore this case study ↓
Raw sources
Salesforce
accounts, pipeline
Stripe
subs, invoices
Intercom
tickets, convos
Snowflake
usage events
Delighted
NPS responses
Cloudbeds
bookings, properties
sync·resolve·transform
Unified objects
Customer
10 entities · 4 sources
Subscription
34 entities · 1 source
Ticket
127 entities · 1 source
Usage
1.2K events · 1 source
Booking
3.4K bookings · 1 source
Property
10 properties · 1 source
churn_analysis.ipynb
Python 3.12 (flightdeck)
In [1]:
from flightdeck.models import Customer
customers = Customer.list(
include=["subscriptions", "tickets"],
order_by="arr:desc"
)
customers.to_df()[["name", "arr", "health_score", "segment"]]
Out[1]:
namearrhealth_scoresegment
0Pacific Heights Hotel156,00094enterprise
1Skyline Tower Hotel132,00042enterprise
2The Westbury Hotel98,00088mid-market
3Harbor Point Hotel72,00067mid-market
4Riverside Inn64,00051mid-market
5Mountain Lodge48,00091smb
In [2]:
at_risk = [c for c in customers if c.health_score < 70]
for c in at_risk:
open_tix = [t for t in c.tickets if t.status == "open"]
print(f"{c.name}: health={c.health_score}, {len(open_tix)} open, ${c.arr:,.0f}")
Out[2]:
Skyline Tower Hotel: health=42, 7 open, $132,000
Harbor Point Hotel: health=67, 3 open, $72,000
Riverside Inn: health=51, 5 open, $64,000
In [3]:
colors = ["#FF5F57" if c.health_score < 70 else "#D4763C" for c in customers]
customers.to_df().plot.barh(x="name", y="arr", color=colors)
Out[3]:
Mountain Lodge
$48K
Riverside Inn
$64K
Harbor Point Hotel
$72K
The Westbury Hotel
$98K
Skyline Tower Hotel
$132K
Pacific Heights Hotel
$156K
Three cells. No SQL, no API plumbing, no data dictionary lookups. The typed SDK means c.health_score and c.tickets just work. Your IDE and your notebook know the schema.
Salesforce
Stripe
Zendesk
Slack
GitHub
Customer
Subscription
Ticket
Repo
Conversation
Deployment
$424K ARR5 customers2 at-risk renewals3 tickets escalated
Explore this case study ↓
Raw sources
Salesforce
accounts, contacts
Stripe
subs, invoices
Zendesk
tickets, satisfaction
Slack
channels, messages
GitHub
repos, deploys
sync·resolve·transform
Unified objects
Customer
5 entities · 4 sources
Subscription
5 entities · 1 source
Ticket
18 entities · 1 source
Repo
24 repos · 1 source
Conversation
42 threads · 1 source
Deployment
156 deploys · 1 source
ChatGPT
GPT-5
S

I’m prepping for our Q2 planning meeting. Show me customers ranked by ARR with their health scores and renewal dates.

Used Flightdeckquery_entities · Customer

Here’s your customer base ranked by ARR:

CustomerPlanARRHealthRenewal
NovaPay SystemsEnterprise$186K91May 31, 2026
CoreLogic SolutionsEnterprise$142K64Mar 15, 2026
Brightfield AnalyticsGrowth$48K58Feb 17, 2026
Mesa InfrastructureGrowth$36K85Aug 1, 2026
Driftwood LabsStarter$12K92Apr 12, 2026

A few things worth flagging for planning:

Brightfield Analytics renews in 3 days with a health score of 58. If that renewal conversation hasn’t started, it’s urgent.
CoreLogic Solutions is your second-largest account ($142K) with a health score of 64 and renewal in 5 weeks. Worth a check-in before that date.
S

Escalate the open tickets for Brightfield and send a heads-up to their Slack channel.

Used Flightdeckexecute_action · escalate_tickets
Used Flightdeckexecute_action · send_slack_message

Done. Here’s what I did:

Escalated 3 open tickets to Urgent in Zendesk
Sent message to #brightfield-cs on Slack with ticket links and EOW deadline

Given the health score and renewal timing, it might be worth pulling up Brightfield’s recent usage trends before the QBR. Want me to dig in?

Same MCP server, different AI platform. The CS lead didn’t need to learn a new tool or ask engineering for a report. They just asked ChatGPT, which queried live business data and took action.
AWS
LaunchDarkly
Salesforce
Terraform Cloud
DataDog
Partner
Environment
VPNTunnel
FeatureFlag
Asset
Contract
1 live4 onboarding1 blockednext go-live 15d
Explore this case study ↓
Raw sources
AWS
EC2, S3, IAM
LaunchDarkly
flags, segments
Salesforce
accounts, contracts
Terraform Cloud
workspaces, runs
DataDog
monitors, SLOs
sync·resolve·transform
Unified objects
Partner
10 entities · 2 sources
Environment
28 entities · 3 sources
VPNTunnel
28 tunnels · 1 source
FeatureFlag
120 flags · 1 source
Asset
80 assets · 2 sources
Contract
10 contracts · 1 source

Five systems, six unified objects. Flightdeck syncs infrastructure state from AWS, Terraform, LaunchDarkly, DataDog, and Salesforce into a single partner onboarding model.

Y
Pull up our partner onboarding portal.
F
Here’s your onboarding portal. 1 partner live, 4 onboarding, 1 blocked. Relay Commerce has a VPN blocker on their production cutover. Pulling live data from Partner, Environment, and Contract:
partner-onboarding

Partner Onboarding

5 partners
Live
1
Onboarding
4
Next go-live
16d
Blocked
1
PartnerStageSandboxProductionGo-liveStatus
Meridian HealthEnterprise
Live6/66/6Feb 1, 2026Live
Atlas LogisticsEnterprise
UAT6/60/6Mar 3, 2026(16d)On Track
Relay CommerceGrowth
Production Setup6/62/6Mar 10, 2026(23d)Blocked
Pinnacle FoodsGrowth
Integration Testing4/60/6Apr 1, 2026(45d)On Track
Signal LabsStarter
Sandbox Setup0/60/6Apr 15, 2026(59d)On Track

Relay Commerce

BlockedProduction Setup
23d to go-live
Blocker
VPN tunnel to production VPC rejected by Relay IT security review. Awaiting revised firewall rules from [email protected].
Sandbox6/6
VPN TunnelConnected
Feature Flags12/12 enabled
S3 Assets4 buckets
IAM RolesProvisioned
API KeysIssued
Monitoring3 monitors
Production2/6
VPN TunnelRejected
Feature Flags8/12 enabled
S3 Assets4 buckets
IAM RolesProvisioned
API KeysBlocked by VPN
MonitoringBlocked by VPN
Activity
Feb 14Production VPN rejected — Jira RELAY-847 created
Feb 12Production flags partially configured (8/12)
Feb 10Sandbox UAT signed off
Jan 28Integration testing passed
Five systems, one portal. The partnerships lead sees every partner’s onboarding stage, go-live date, and blockers without opening AWS, Terraform, or LaunchDarkly. When something’s blocked, they see why and can act on it.