Skip to content
Smartsheet integration

Use FXMacroData in Smartsheet

Keep official macro indicators, FX rates, commodities, release calendars and COT positioning in a Smartsheet sheet. Every route runs server-side, on your own scheduler or on Smartsheet's servers, so your API key never sits in a browser.

What you can do

OptionBest forRuns inSmartsheet plan
A. Sync toolFull history of any dataset, with a typed sheet created for youYour machine, a server or CI, on a scheduleAny plan with API access
B. Bridge scheduled refreshKeeping the newest release current with no script to hostSmartsheet Bridge, on a scheduleBridge with the Call API utility
C. Bridge release webhookA row the moment a release is publishedFXMacroData calls a Bridge workflow triggerBridge
D. AI assistantsReading a series and writing rows in plain languageAn MCP client connected to both servicesSmartsheet's MCP server

Free USD data

Without an API key, USD indicators, the USD release calendar and USD COT positioning are available for the last 90 days, with a 15-minute delay after each release.

Subscription data

Other currencies, FX rates, commodities, full history and webhooks need an API key from a subscription.

Key handling

The sync tool reads your key from an environment variable and sends it in the X-API-Key header. In Bridge it lives in the Call API profile's secret header. It is never written to a URL.

Option A

Sync tool

fxmd_smartsheet_sync.py reads one FXMacroData dataset, creates the sheet with typed columns if it does not exist, and upserts rows matched on the primary Key column: new releases are added, revised values are updated, and unchanged rows are left alone. It needs Python 3.8 or later and uses only the standard library.

  1. Create a Smartsheet API access token under Account > Personal settings > API access. API access needs a paid Smartsheet plan.
  2. Download fxmd_smartsheet_sync.py and set SMARTSHEET_ACCESS_TOKEN, plus FXMD_API_KEY for subscription data.
  3. Run it once with a workspace or folder ID to create the sheet, or with --sheet-id to fill a sheet you already have.
  4. Schedule the same command with cron, Task Scheduler or a CI job.
export SMARTSHEET_ACCESS_TOKEN=YOUR_SMARTSHEET_TOKEN
export FXMD_API_KEY=YOUR_API_KEY        # optional for USD indicators, calendar and COT

# Find or create "FXMacroData USD inflation" in a workspace and upsert rows
python fxmd_smartsheet_sync.py indicator --currency usd --indicator inflation \
    --workspace-id 1234567890123456

# Other datasets
python fxmd_smartsheet_sync.py forex --base eur --quote usd --folder-id 2345678901234567
python fxmd_smartsheet_sync.py commodity --commodity gold --sheet-id 3456789012345678
python fxmd_smartsheet_sync.py calendar --currency gbp --workspace-id 1234567890123456
python fxmd_smartsheet_sync.py cot --currency jpy --workspace-id 1234567890123456

# Preview the rows without touching Smartsheet (no token needed)
python fxmd_smartsheet_sync.py indicator --currency usd --indicator gdp --dry-run

Options

OptionMeaning
--sheet-idUpsert into an existing sheet. It needs a Text/Number column named Key; missing data columns are added.
--workspace-id, --folder-idFind the sheet by name there, or create it with typed columns.
--sheet-nameOverride the default name, such as FXMacroData USD inflation or FXMacroData EURUSD.
--start-date, --end-dateLimit the history, YYYY-MM-DD.
--max-rowsRows to read from FXMacroData, default 5,000, maximum 20,000.
--regionus (default), eu, au or gov, or set SMARTSHEET_REGION. A token only works on its own Smartsheet instance.
--batch-sizeRows per add or update request, default and maximum 500.
--dry-runPrint the rows as JSON instead of writing.

What it writes

DatasetColumnsKey example
indicatorKey, Date, Value, Previous, Change, Released at (UTC), Currency, Indicatorusd:inflation:2026-09-30
forexKey, Date, Rate, Open, High, Low, Close, Pairfx:eurusd:2026-09-01
commodityKey, Date, Value, Commoditycommodity:gold:2026-09-01
calendarKey, Release, Name, Scheduled date, Scheduled at (UTC), Reference period, Importance (dropdown: high, medium, low), CurrencyThe calendar event ID
cotKey, Date, Open interest, Non-commercial net, Commercial net, Leveraged funds net, Asset manager net, Dealer net, Released at (UTC)usd:cot:2026-09-01

Date columns are typed as dates and numbers are written as numbers. Smartsheet's API cannot create date-time columns, so release times are ISO 8601 UTC text. Indicator keys match the record_key of FXMacroData release webhooks, so the sync tool and the Bridge workflows can share a sheet.

Smartsheet allows 300 requests per minute per token. The tool retries rate limits and temporary errors with backoff, and never retries row or sheet creation, so a retry cannot create duplicates. A sheet holds at most 500,000 cells; the tool stops before a write that would pass that limit, so use --start-date or a new sheet for very long histories. Only changed rows are rewritten, so a scheduled run usually costs a few requests.

# Every hour at minute 5
5 * * * * /usr/bin/python3 /opt/fxmd/fxmd_smartsheet_sync.py indicator --currency usd --indicator inflation --sheet-id 3456789012345678

Keep the tokens in your scheduler's secret store rather than in the crontab.

Option B

Smartsheet Bridge scheduled refresh

A Bridge workflow fetches the latest release on a schedule and adds or updates the matching row. It runs on Smartsheet's servers, so there is no script to host. Backfill history once with the sync tool, then let Bridge keep the newest rows current.

The Call API utility is part of Smartsheet Bridge on the Enterprise plan, on the US and EU instances.
  1. Create the sheet with the sync tool, for example indicator --currency usd --indicator inflation --workspace-id <workspace id>, and register the Smartsheet integration in Bridge with an account that can edit it.
  2. Call API profile. Add a profile named FXMacroData with base URL https://api.fxmacrodata.com and a secret header X-API-Key holding your key. Leave the header out for free USD data.
  3. Trigger. Create a workflow with a Schedule trigger. Hourly suits most indicators; daily is enough for monthly data.
  4. Fetch latest. Add Make API Call with the FXMacroData profile, method GET, endpoint v1/announcements/usd/inflation and form parameters fields=compact and limit=1. Tick the option to stop on an API error. Run the workflow once and open the Run Log: data > 0 holds date, val, previous_value, change_from_previous and announcement_datetime.
  5. Find row. Add Smartsheet > Search Sheet filtering Key equals usd:inflation: followed by the date reference from the previous step.
  6. Exists? Add a Match junction: one path when a row is found, one when it is not.
  7. Update existing: Update Row with the found row ID, setting Value, Previous and Change. This picks up revisions.
  8. Add new: Add Row with Key, Date, Value, Previous, Change, Released at (UTC), Currency and Indicator.

announcement_datetime from the API is Unix seconds, while the sync tool writes ISO 8601; either works in a Text/Number column. To track more series, clone the workflow and change the endpoint and Key prefix, or call one child workflow per series with Run Child Workflow. Bridge has no workflow import file; scheduled-refresh.blueprint.json lists every module and field in one place as a build reference.

Option C

Release webhook into a Bridge workflow

FXMacroData sends a webhook the moment a release is stored. A Bridge workflow trigger URL accepts any JSON POST and exposes the body as runtime references, so the standard signed JSON webhook works without a special preset. Webhook subscriptions need an active paid API key.

  1. In Bridge, open Utilities > Inbound Webhooks, add a Workflow Trigger for a new workflow, and copy its request URL. Treat it as a secret: anyone with the URL can start the workflow.
  2. In API management, open Webhooks, choose Your server (signed JSON), paste the Bridge URL, optionally limit it to the currencies and indicators you want, and create the webhook. Or create it with the API, as below.
  3. Send the sample body below to the trigger URL so Bridge can show its references before the next release.
  4. Build the workflow: Search Sheet with Key equals {{runtime.data.currency}}:{{runtime.data.indicator}}:{{runtime.data.latest_announcement.date}}, a Match junction, then Update Row with Value from {{runtime.data.latest_announcement.val}}, or Add Row with Key, Date, Value, Released at (UTC), Currency and Indicator from the same references.

Create the subscription with the API

curl -X POST "https://api.fxmacrodata.com/v1/webhooks/subscriptions" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "BRIDGE_TRIGGER_URL",
    "destination": "generic",
    "events": ["announcement"],
    "currencies": ["usd"],
    "indicators": ["inflation"],
    "description": "Smartsheet Bridge"
  }'

Leave out currencies or indicators to receive every release.

Sample body for testing the trigger

{
  "id": "usd_inflation_1791981000",
  "event": "announcement",
  "data": {
    "event_id": "usd_inflation_1791981000",
    "currency": "usd",
    "indicator": "inflation",
    "records_written": 1,
    "latest_announcement": {
      "date": "2026-09-30",
      "val": 3.7,
      "announcement_datetime": "2026-10-14T12:30:00Z"
    }
  }
}
  • Every delivery carries an X-FXMD-Signature header, but Bridge cannot check HMAC signatures, so the secrecy of the trigger URL is what protects the workflow. If the URL leaks, delete the trigger in Bridge, create a new one, and update the subscription with PATCH /v1/webhooks/subscriptions/{id}.
  • Use a plain Workflow Trigger. Advanced triggers that require the Inbound-Webhook-Secret header cannot be used, because FXMacroData webhooks do not send custom headers.
  • Delivery history and status codes are available from GET /v1/webhooks/deliveries and in webhook delivery logs.

Option D

AI assistants with both MCP servers

Connect an MCP client to the FXMacroData MCP server and to Smartsheet's MCP server, then ask it to read a series from one and write rows through the other, with your own permissions on both.

https://mcp.fxmacrodata.com/mcp

USD data works without a key. Setup for each client is in the MCP server guide.

Related docs

Questions about a Smartsheet setup? Contact info@fxmacrodata.com.

AI Answer-Ready

Key Facts

Page
Smartsheet
Section
Documentation
Canonical URL
https://fxmacrodata.com/documentation/smartsheet
Source
FXMacroData editorial and official publisher references
Last Updated
See page metadata

Provenance And Trust

Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.

Quick Q&A

What is this page about? This page explains Smartsheet with directly usable context for trading, research, and API workflows.

What source should be cited? Use the canonical URL and the listed source field; cite official publisher references when available.

How fresh is this content? The last updated value above reflects the page metadata or latest available data timestamp.

Can this be used in AI assistants? Yes. This section is intentionally structured for retrieval and citation in chat assistants.

Prompt Packs

Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.

Share page X LinkedIn Email