Bullion API prices in Zapier
Build a no-code Zap that fetches metal prices on a schedule and sends them to Slack, Gmail or a spreadsheet. Prices refresh hourly on weekdays, and each value keeps its observation time.
Prices refresh hourly on weekdays. No refresh runs at 22:00 UTC on weekdays or at 23:00 UTC on Friday, so those runs return the last price with its earlier observation time. Each value is sent with its observation time, so readers can see how old it is.
Zapier names its steps as they appear in the Zap editor. If a name differs, look for the same step.
A weekday message, with its observation time
Synthetic example. The Zap fills these fields from the API response: the value, its observation time and the change.
Gold: 4,100.00 USD per troy oz
Observed 2026-11-05 14:00 UTC
Change over 1 day: +0.45%Build the Zap in seven steps
Start with a schedule
Add a Schedule by Zapier trigger and choose the Every Hour event. Set the time offset to a few minutes past the hour. Leave Trigger on weekends? off, so the Zap runs on weekdays only and makes no request at weekends.
Optional: check weekdays in UTC
The schedule follows your Zapier account's timezone, and the refresh pauses are set in UTC. If your account is not on UTC, add Formatter by Zapier: choose Date / Time, the Format transform and the ddd format, map the date from the Schedule step, and set the timezone to UTC. Then add Filter by Zapier and continue only when the day is not Sat and not Sun. Runs on a UTC weekend stop here, before the price request.
Fetch the price
Add Webhooks by Zapier, choose the GET event and set the URL to the price endpoint. In Headers, add X-API-Key with your key.
GEThttps://bullionapi.dev/v1/gold/price?currency=USD&unit=troy_ozShellcurl "https://bullionapi.dev/v1/gold/price?currency=USD&unit=troy_oz" \ -H "X-API-Key: bullion_YOUR_API_KEY"Map the value and the time
From the Webhooks step, map the value and the date of the first observation in the first series. Keep them as text: the API sends each value as a decimal string with up to eight decimal places. To show two decimals, use the Numbers tools in Formatter by Zapier, then check the step's preview before you turn the Zap on.
Send the message
Add a Slack, Gmail or Google Sheets action and place the mapped fields in it. The example above is one message.
Optional: alert on a rise of more than 1%
Add a second Webhooks by Zapier GET to the change endpoint with period set to 1d. Then add Filter by Zapier and continue only when change_percent is greater than 1. change_percent is a percentage, so 1 means 1%. This filter alerts on a rise only. To alert on a fall of more than 1%, use less than -1 instead. The check adds one request for each run.
GEThttps://bullionapi.dev/v1/gold/change?currency=USD&unit=troy_oz&period=1dShellcurl "https://bullionapi.dev/v1/gold/change?currency=USD&unit=troy_oz&period=1d" \ -H "X-API-Key: bullion_YOUR_API_KEY"Test, then turn it on
Test each step with its sample data and check the previews. Each test calls the API, so each one uses requests from your allowance.
What the API sends back
The price response holds one series with one observation. The value is a decimal string in the requested unit, and the date is the UTC time of the observation.
{
"status": "success",
"metric": "price",
"metal": "gold",
"currency": "USD",
"unit": "troy_oz",
"start": null,
"end": null,
"series": [
{
"id": "gold_price",
"label": "Gold spot price",
"unit": "troy_oz",
"frequency": "hourly",
"method": "latest",
"observations": [{ "date": "2026-11-05T14:00:00.000Z", "value": "4100" }]
}
]
}Keep your key private
- Create an API key in your dashboard.
- Put the key only in the Zapier step. Zapier stores what you type into a step, so treat anyone with access to the Zap as having the key. Never paste it into shared documents, screenshots or client-side code.
- If the Zap is shared or the key leaks, revoke the key in your dashboard and add a new key to the step.
Errors you may see
A failed Webhooks step shows the status code and the API's message. Check the status code first, then the message.
| Status | Message | What to check |
|---|---|---|
| 401 | Missing API key | The Headers field has no X-API-Key row. |
| 401 | Invalid or revoked API key | Copy the key again from your dashboard, or create a new one. |
| 403 | Your free trial has ended. Choose a plan at https://bullionapi.dev/pricing to keep using the API. | Choose a paid plan, then turn the Zap on again. |
| 404 | The requested API path was not found. | Check the URL, including the metal name and the path. |
| 404 | The change check has no stored price for one or both days. | Wait for the next refresh, then run the Zap again. The price step still works. |
| 429 | Rate limit exceeded | Wait for the window to reset (see the retry-after header), then run the Zap again. |
| 429 | Your monthly usage limit has been reached. Please upgrade your subscription plan. | Your plan has used its monthly requests. Choose a larger plan. |
For every endpoint and parameter, see the API reference. For a spreadsheet workflow instead, see Google Sheets.