# Connect your sales

> Add the platforms you earn on, from Stripe and Shopify to Patreon and ad networks: keys, sign-ins and webhooks, and what makes a source Verified.

odo adds up everything you earn, wherever you earn it, in one live number. Each place you earn is a source.

## Add a source

Open **Settings → Add a source** and pick the app: Stripe, PayPal, Shopify, Patreon, Gumroad, Ko-fi, Lemon Squeezy, Tebex, YouTube, AdSense, the App Store and many more. Each shows its own steps. They come in a few kinds:

- **Read by odo.** Apps with an official API are read by odo’s server, with a key you paste or a sign-in you approve. These can be Verified.
- **Webhooks.** Apps that send each payment as it happens (Ko-fi, say) get a secret address of their own, `https://odo.gg/api/hooks/<source>/<secret>`, to paste into the app.
- **Anything else** can send its sales through Zapier, Make, n8n, Pipedream or IFTTT to a **Custom webhook**, or come in as a CSV export.
- **Your own server** can send payments with a [project API key](https://odo.gg/docs/api#payments), or answer odo at an address of its own (**Your API**: odo asks it for each day’s revenue).

A new source imports about 400 days of history, then keeps up: Stripe every minute, most others every few minutes. Keys are encrypted at rest and only ever used by odo’s server.

## Verified or self-reported

Every source has a tier, and a badge only while it’s true.

| Tier | How it’s connected | Badge |
| --- | --- | --- |
| Verified | odo’s server reads the platform itself: Connect with Stripe, or an official API key | A blue seal |
| Self-reported | Webhooks, your own API, CSV imports, demo data, Stripe’s test mode | None, ever |

The seal also needs a working connection that synced in the last 6 hours, and each platform account backs one odo profile only, the first to connect it, so connecting a friend’s account doesn’t borrow their seal. The business name the platform reports shows beside it: *Verified via Stripe · Racing Green Motors*.

## Stripe

**Connect with Stripe** approves read-only access on Stripe’s own page. It’s Verified, and it can already read what [tracing sales to visits](https://odo.gg/docs/sales-to-visits) needs.

Or paste a **restricted key** (Stripe → Developers → API keys → Create restricted key) with **Balance: Read** to count earnings. To trace each sale to its visit, also give it read access to Charges, Customers, Invoices, Subscriptions and Checkout Sessions. A secret key works too, but it can do far more than odo needs.

odo counts charges and application fees, less refunds and disputes; net takes off Stripe’s fees too. Payouts, transfers, top-ups and reserves move money you already earned, so they’re left out.

## One currency, your clock

Every source is converted to your display currency at the European Central Bank’s rates, and days turn over at midnight in your time zone. **Settings → Display → Count** chooses what earnings mean: gross (what customers paid, after refunds) or net (after fees too).

## Projects

Sources belong to a project: one business, with its own sources, websites, look and people. **Global** adds every project up. Put a website and its payment sources in the same project, and odo can trace the sales to the visits. More in [projects, team and roles](https://odo.gg/docs/team).

## Next

[Check it’s working](https://odo.gg/docs/check-its-working), then [trace each sale to its visit](https://odo.gg/docs/sales-to-visits).
