# What ninedot can connect

All read-only. Every figure carries a trust level: exact (read from the provider), measured (derived from usage or a rolling window) or estimated (plan list price). Connect an account once in ninedot → Vault and use it across every product.

## Vercel · hosting

Deploy status, domains and what each project really costs.

Reads: Your projects, their production deploy status and custom domains, and the team's billing export.

Gives you:
- Production deploy status per project (failed deploys raise an alert) (live status)
- Cost per project over the last 30 days, from Vercel's own billing data (measured)
- Team plan and seats, counted once so nothing is double-counted (measured)
- Custom domains, used to match the rest of a business's stack automatically (exact)

Limits:
- Tokens from a role without billing access can't prove cost: ninedot suggests the plan's list price for you to confirm.
- Nothing is ever changed in Vercel.

Key: Access token. Vercel tokens can't be made read-only; ninedot only ever reads. Create it at https://vercel.com/account/settings/tokens. Steps: https://ninedot.app/integrations/vercel

## Railway · hosting

Every service and its latest deploy.

Reads: Projects, services and the state of each service's latest deploy.

Gives you:
- Deploy status per service: deployed, deploying, crashed, sleeping (live status)

Limits:
- Railway's API doesn't expose dollar cost per project, so cost is left blank rather than guessed.
- Nothing is ever changed in Railway.

Key: Account token. Railway tokens can't be made read-only; ninedot only ever reads. Create it at https://railway.com/account/tokens. Steps: https://ninedot.app/integrations/railway

## Netlify · hosting

Sites, custom domains and production deploys.

Reads: Sites, their custom domains, the latest production deploy and your account plan.

Gives you:
- Production deploy status per site (live status)
- Custom domains, used to match a business's other services (exact)
- Account plan name (exact)

Limits:
- Netlify doesn't report plan prices through its API, so cost is left blank.
- Nothing is ever changed in Netlify.

Key: Personal access token. Netlify tokens can't be made read-only; ninedot only ever reads. Create it at https://app.netlify.com/user/applications#personal-access-tokens. Steps: https://ninedot.app/integrations/netlify

## Supabase · database

Project health and your plan.

Reads: Projects, their health status and your organisation's plan.

Gives you:
- Project health: healthy, paused, unhealthy, restoring (live status)
- Plan list price per organisation, shown only to you (estimate to confirm)

Limits:
- Supabase doesn't report what it bills, so ninedot suggests a list-price estimate for you to confirm; it's never shown as verified.
- Nothing is ever changed in Supabase.

Key: Scoped access token (read-only). Give it Read access to Organizations, Organization Settings and Projects (account-wide), nothing else. Create it at https://supabase.com/dashboard/account/tokens. Steps: https://ninedot.app/integrations/supabase

## Neon · database

Postgres projects across your organisations.

Reads: Projects, their region and Postgres version, and each organisation's plan.

Gives you:
- Projects with region and Postgres version (exact)
- Plan name per organisation (exact)

Limits:
- Neon only reports usage costs on its higher plans, so cost is left blank.
- Nothing is ever changed in Neon.

Key: API key. Neon keys can't be made read-only; ninedot only lists projects. Create it at https://console.neon.tech/app/settings/api-keys. Steps: https://ninedot.app/integrations/neon

## Stripe · payments

MRR per business, fees, refunds and chargebacks.

Reads: Subscriptions, products, balance transactions, charges and disputes, read-only.

Gives you:
- MRR per Stripe product and for the whole account (exact)
- Stripe's fees, counted as a cost so margin is net of fees (measured)
- Collected, net landed, refunds and one-off sales over the last 30 days (measured)
- New, cancelled and trialing subscriptions in the last 30 days (exact)
- Failed payments and new chargebacks raise an email alert (live status)

Limits:
- Discounted or metered subscriptions make MRR measured rather than exact.
- Currencies aren't converted: a business in USD and one in AUD aren't added together.
- Nothing is ever changed in Stripe.

Key: Restricted key (read-only) (read-only). Read access to Subscriptions, Products, Balance, Charges and Disputes. Everything else stays off. Create it at https://dashboard.stripe.com/apikeys/create. Steps: https://ninedot.app/integrations/stripe

## Resend · email

Sending domains and their DNS status.

Reads: Sending domains and whether their DNS records are verified.

Gives you:
- Domain verification status (a domain failing DNS checks raises an alert) (live status)
- Sending domain, used to match a business's other services (exact)

Limits:
- Resend doesn't report plan or cost through its API.
- Nothing is ever changed in Resend.

Key: API key (full access). Resend's sending-only keys can't list domains; ninedot only reads. Create it at https://resend.com/api-keys. Steps: https://ninedot.app/integrations/resend

## Cloudflare · dns

Domains, plans and Pages projects.

Reads: Zones with their status and plan, and Pages projects with their latest deploy.

Gives you:
- Zone status (active, pending nameservers, moved) (live status)
- Zone plan list price, as an estimate for you to confirm (estimate to confirm)
- Pages production deploy status and custom domains (live status)

Limits:
- Pages needs the token's Pages Read permission; without it domains still work.
- Nothing is ever changed in Cloudflare.

Key: API token (read-only) (read-only). Zone Read, Cloudflare Pages Read and Account Settings Read, scoped to the zones you choose. Create it at https://dash.cloudflare.com/profile/api-tokens. Steps: https://ninedot.app/integrations/cloudflare

## OpenAI · ai

API spend per project, on the business that uses it.

Reads: Projects and what each spent on the API over the last 30 days, from the organisation Costs API.

Gives you:
- Spend per project, last 30 days, with the last 7 days and the biggest model (measured)

Limits:
- Needs an organisation admin key with Read only permissions; project keys can't read costs.
- Spend is a rolling 30-day window, not a calendar-month invoice.

Key: Admin key (read-only) (read-only). Created by an organisation owner with Permissions set to Read only. Create it at https://platform.openai.com/settings/organization/admin-keys. Steps: https://ninedot.app/integrations/openai

## Anthropic · ai

Claude API spend per workspace, on the business that uses it.

Reads: Workspaces (including the default one) and what each spent over the last 30 days, from the cost report.

Gives you:
- Spend per workspace, last 30 days, with the last 7 days and the biggest model (measured)

Limits:
- Needs an organisation Admin API key; individual accounts have no Admin API.
- Anthropic admin keys can't be limited to read-only; ninedot only calls the workspace list and cost report.

Key: Admin API key. Created under Settings → Admin keys by an organisation admin. Create it at https://platform.claude.com/settings/admin-keys. Steps: https://ninedot.app/integrations/anthropic

## YouTube · audience

Subscribers, views and uploads for every channel you run.

Reads: A channel's public statistics: subscribers, total views, video count, its latest uploads and their views.

Gives you:
- Subscribers, as YouTube shows them publicly (rounded to three figures) (measured)
- Total channel views and number of videos (exact)
- Last upload, and average views across the latest five (exact)
- Subscriber history, kept from every read (measured)

Limits:
- Public figures only: watch time, revenue and analytics need YouTube's private API, which isn't connected yet.
- Read twice a day, not live.
- A channel that hides its subscriber count shows views only.

Nothing to connect: public figures. Steps: https://ninedot.app/integrations/youtube
