Trading journal
A trading journal collects every alert in one place where you review it later: when did it come, at what price, and did you trade? Bellchain writes every alert as a row into Notion, Airtable or Google Sheets. The journal comes with the Pro plan. It keeps running while your alerts are muted, and test alerts arrive with the “Test” box ticked.
Columns
Section titled “Columns”Bellchain fills the columns your table has, by their name, in English or German, regardless of upper and lower case:
| Column | also | Content |
|---|---|---|
| Alert ID | ID, Kennung | unique ID of the alert; with it, an alert never appears twice |
| Time | Date, Zeit | close of the candle on which the chain triggered |
| Chain | Kette | name of the chain |
| Pair | Coin, Symbol, Paar | such as BTC/USDT |
| Timeframe | Interval, Zeiteinheit | such as 1h |
| Price | Kurs | price at trigger time |
| Message | Text, Nachricht | the action’s message without highlighting |
| Values | Werte | such as “RSI 14: 28.7 · Price: $117,234” |
| Test | ticked for test alerts |
The first column (in Notion the title) gets the chain and pair unless it already is one of the columns above. Columns with other names stay free for your notes, such as “Traded” or “Result”.
Notion
Section titled “Notion”-
Create a database in Notion, such as “Trading journal”, with the columns from the table above: ideally Time as a date, Price as a number, Pair as a select, Alert ID as text and Test as a checkbox.
-
Open notion.so/profile/integrations, create an internal integration, such as “Bellchain”, with the capability “Insert content”, and copy the token (starts with
ntn_). -
Open the database, click … at the top right, then Connections, and add the “Bellchain” integration.
-
Drag the Notion node onto the board in the editor, enter the token and the database’s address from the browser, and click Send test in the properties.
Notion stores data in the USA. Notion allows about three requests per second; beyond that Bellchain waits and tries again.
Airtable
Section titled “Airtable”-
Create a table in Airtable, such as “Journal”, with fields such as Time (date with time), Price (number), Pair (single select), Alert ID (text) and Message (long text).
-
Open airtable.com/create/tokens and create a personal access token with the scopes
data.records:read,data.records:writeandschema.bases:read, for this base only. -
Drag the Airtable node onto the board in the editor, enter the token and the table’s address from the browser (it contains
app…andtbl…) and click Send test.
Airtable’s Free plan has only 1,000 calls per month; every alert needs one, plus at most one per hour for the fields. Once the allowance is used up, Bellchain stops instead of trying again. Airtable stores data in the USA.
Google Sheets
Section titled “Google Sheets”Without connecting an account, with a small script in your spreadsheet:
-
Create a new spreadsheet in Google Sheets, such as “Trading journal”. The script writes the header row itself on the first alert.
-
Open Extensions → Apps Script, delete the sample code and paste this script:
function doPost(e) {const alert = JSON.parse(e.postData.contents);const lock = LockService.getScriptLock();lock.waitLock(20000);try {const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];if (sheet.getLastRow() === 0) sheet.appendRow(['Alert ID', 'Time', 'Chain', 'Pair', 'Timeframe', 'Price', 'Message', 'Values', 'Test']);const ids = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().flat();if (!ids.includes(alert.id)) {const values = alert.values.map((v) => v.label + ': ' + v.text).join(' · ');const message = alert.message.replace(/\*\*|`/g, '');sheet.appendRow([alert.id, new Date(alert.time), alert.chain.name, alert.pair, alert.timeframe, alert.price, message, values, alert.test]);}} finally {lock.releaseLock();}return ContentService.createTextOutput('ok');} -
Click Deploy → New deployment, type Web app, “Execute as: Me”, “Who has access: Anyone”, confirm the permissions and copy the address ending in
/exec. -
Drag the Google Sheets node onto the board in the editor, enter the address and click Send test. The spreadsheet then has a row marked “Test”.
Anyone who knows the address can add rows; that is why it stays empty when you export a chain. If you change the script, you need a new deployment, and the address only stays the same if you edit the existing one under Manage deployments.
Connecting with one click through your Google account, without a script, is prepared. It comes once Google has verified Bellchain’s app. With Trader, the same script also works through the webhook.
When something does not arrive
Section titled “When something does not arrive”| Reason in the history | Meaning |
|---|---|
notion_token_invalid, airtable_token_invalid |
The token is wrong or deleted. |
notion_not_shared |
The database is not shared with the integration (step 3). |
airtable_forbidden, airtable_not_found |
The token lacks rights or the base, or the table does not exist. |
notion_invalid, airtable_invalid |
A value does not fit a column, such as text in a number; detail names the column. |
airtable_limit |
Airtable’s monthly allowance is used up. |
sheets_script_unavailable |
The deployment is missing or not shared with “Anyone”. |
…_rate_limited, …_unavailable, …_network |
The service is slowing down or was not reachable; Bellchain tries again later, without duplicate rows. |
Version 2026.10.25.16 · Changelog