Google Sheet Configuration

Configure broker credentials and strategy sizing in a Google Sheet you own. Credentials never touch our database.

Execute reads your broker credentials and strategy sizing from a Google Sheet that you own. Your API keys and tokens live in your spreadsheet, not in our database. Revoke access at any time by unsharing the sheet.

Why a Google Sheet

Three reasons:

  1. You own your credentials. Your broker API keys, tokens, and account IDs stay in a spreadsheet under your Google account. Execute reads them at runtime via a service account. We never store them.
  2. Revoke instantly. Remove the service account from your sheet's sharing settings and Execute loses access immediately. No support tickets, no waiting period.
  3. Edit without deploying. Change position sizes, enable or disable accounts, adjust risk parameters — all from a spreadsheet. Changes take effect within minutes when the config cache refreshes.
⚠️

Never share your Google Sheet link publicly. It contains broker API credentials. Only share with the Execute service account provided during onboarding.

Create the AccountConfig tab

Open a new Google Sheet (or use an existing one) and create a tab named AccountConfig. This exact name is required.

Required columns

Add these columns in the first row:

ColumnTypeDescription
enabledTRUE/FALSEWhether Execute uses this account. Set to FALSE to pause without deleting the row.
brokerTextBroker identifier: zerodha or ibkr
account_idTextYour broker account ID (e.g., DU1234567 for IBKR, AB1234 for Zerodha)
api_keyTextAPI key from your broker's developer console
api_secretTextAPI secret (Zerodha) or not used (IBKR — authentication runs through the gateway)
tokenTextAccess token. For Zerodha, this is the session token generated daily via Kite login. For IBKR, leave blank — the gateway handles sessions.

Where to get credentials

Interactive Brokers:

  1. Log in to IBKR Account Management
  2. Navigate to Settings > API > API Keys
  3. Copy your account ID (starts with DU for paper, U for live)
  4. The IBKR gateway handles authentication separately — you do not need to put a token in the sheet

Zerodha:

  1. Log in to Kite Connect Developer Console
  2. Create an app to get your api_key and api_secret
  3. The token column requires a session token generated via the Kite login flow. This token refreshes daily.
💡

Zerodha tokens expire daily. Ensure your token generation process runs before market open. IBKR uses a persistent gateway that manages sessions automatically.

Strategy sizing columns

For each built-in strategy you want to run, add sizing columns to control how Execute calculates position size on that account.

Two columns per strategy:

ColumnPurposeExample
{strategy}_sizePosition size — max capital amount that can be deployed in a trade. Also known as margin blocked.sst_size: 50000 = allocate $50,000 and compute lots from margin.
{strategy}_riskDollar/rupee risk per trade. The risk engine calculates lots so that a full SL hit equals this amount.sst_risk: 500 = risk $500 per SST trade on this account.

When both _size and _risk are set, the tighter constraint wins. If risk-based sizing produces fewer lots than capital-based sizing, you get the smaller number.

Strategy codes: sst, gss, cst, stob, ics, rsi5. Use lowercase in column names.

ℹ️

Strategies without sizing columns on an account are skipped. To run SST on Account A but not Account B, add sst_size only to Account A's row.

Example row

Here is a complete row for an IBKR account running SST and GSS:

enabled    | broker | account_id | api_key      | api_secret | token | sst_size | sst_risk | gss_size | gss_risk
TRUE       | ibkr   | U1234567   | abc123key    |            |       | 1000     | 50       | 1000     | 100

This account trades that many lots on SST entries where risk for that trade does not exceed $50 (capped at $1000 of capital deployed per trade). Similarly for GSS entries, it risks $100 per trade, with total capital deployed capped at $1000.

Scaling to multiple accounts

Add one row per broker account. Execute processes all enabled rows in parallel — entries fire simultaneously across every account where the strategy has sizing configured.

Start with a single account. Once you confirm entries and exits are flowing correctly, add more rows. There is no limit on the number of accounts.

Each account operates independently:

  • Different brokers on different rows (mix IBKR and Zerodha)
  • Different sizing per account (Account A risks $500, Account B risks $1,000)
  • Different strategy sets per account (Account A runs SST + GSS, Account B runs only STOB)

Killswitch tab

The Killswitch tab (exact name required) configures aggregate P&L thresholds per strategy. When a strategy's combined unrealized P&L crosses your threshold, Execute exits every open trade in that strategy automatically.

See Strategy Kill Switch for configuration details, parameter reference, and examples.

Security notes

  • Non-custodial model. Execute reads credentials at execution time and does not persist them. Credentials exist only in your Google Sheet and in memory during order placement.
  • Service account access. You share the sheet with a Google service account (provided during setup). This service account has read-only access to your sheet.
  • Revocation. Remove the service account from your sheet's sharing settings to cut access. Active trades continue with their last known state, but no new entries or exits fire.
  • No credentials in our database. At no point do API keys, tokens, or secrets enter our database or any persistent storage outside your Google Sheet.
⚠️

Changes to your Google Sheet take up to 55 minutes to take effect. The system caches your sheet configuration to avoid excessive API calls. If you need to stop trading immediately, log into your broker directly — do not rely on sheet changes for emergency stops.

Troubleshooting

"Account not found" in Telegram alerts: The account_id in your sheet does not match what the broker API returns. Double-check the exact ID from your broker's account management page.

"Strategy skipped — no sizing config": The strategy fired, but your account row does not have the corresponding {strategy}_size column, or the value is empty. Add the column and set a value.

"Insufficient margin" retries: Execute automatically retries with one fewer lot when margin is insufficient (down to 1 lot). If you see repeated margin rejections, your _size or _risk values are too large for the available margin in that account. Reduce the sizing or add capital to the account.

Orders not firing: Check that enabled is set to TRUE (not "Yes", not "1" — the literal text TRUE). Verify the token is current (Zerodha tokens expire daily).

This is engineering infrastructure, not investment advice. All trading involves risk of loss.

Next steps

  • Built-in Strategies — what each strategy trades and how to enable them
  • Dash — monitor positions and P&L after orders fire
  • Need custom automation beyond built-in strategies? Talk to us.