{"product_id":"n8n-workflow-fx-card-rate-check-with-frankfurter-slack","title":"n8n Workflow: FX Card Rate Check with Frankfurter \u0026 Slack","description":"\u003ch3\u003eSpot FX card rate premiums automatically—then report them to Slack\u003c\/h3\u003e\n\u003cp\u003eThis n8n workflow checks foreign-currency card charges in your Google Sheets, pulls historical exchange rates from the Frankfurter API, calculates premiums versus expected billed amounts, writes results back to Google Sheets, and posts a clear summary to Slack.\u003c\/p\u003e\n\n\u003ch3\u003eWhat this workflow does\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRuns monthly (or on-demand):\u003c\/strong\u003e Trigger it on a schedule or manually to keep your FX monitoring up to date.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eReads your FX statement:\u003c\/strong\u003e It imports charge rows from the \u003cem\u003e“FX statement”\u003c\/em\u003e tab and identifies entries where the transaction currency differs from your configured base currency.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eFetches market rates per date range:\u003c\/strong\u003e It builds per-currency date ranges and requests historical exchange rates from the \u003cstrong\u003eFrankfurter API\u003c\/strong\u003e for the required period.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCalculates premiums and flags issues:\u003c\/strong\u003e For each charge it computes the effective rate, expected billed amount, premium percentage, and extra amount—then assigns a status such as \u003cem\u003eOK\u003c\/em\u003e, \u003cem\u003eHigh premium\u003c\/em\u003e, \u003cem\u003eBelow market\u003c\/em\u003e, \u003cem\u003eRate unavailable\u003c\/em\u003e, or \u003cem\u003eCheck data\u003c\/em\u003e.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eUpdates results safely in Google Sheets:\u003c\/strong\u003e It appends or updates rows in the \u003cem\u003e“FX check”\u003c\/em\u003e tab using a stable row key to avoid duplicates on re-runs.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePosts a Slack summary:\u003c\/strong\u003e Sends totals, highlights the highest premium charges, and flags rows needing attention—or posts a “nothing to check” message if no foreign-currency rows are found.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eUse cases\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eOngoing review of FX premiums on card transactions across multiple currencies.\u003c\/li\u003e\n  \u003cli\u003eAutomated reconciliation for SaaS operators who want consistent monthly reporting.\u003c\/li\u003e\n  \u003cli\u003eOperational monitoring to identify “Rate unavailable” or “Check data” items without manual spreadsheet work.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTechnical details\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGoogle Sheets\u003c\/strong\u003e (OAuth2): read from \u003cem\u003e“FX statement”\u003c\/em\u003e and write to \u003cem\u003e“FX check”\u003c\/em\u003e tabs.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eFrankfurter API\u003c\/strong\u003e: historical exchange rates used for premium calculations.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSlack\u003c\/strong\u003e: posts the run summary to your selected channel.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003en8n nodes used:\u003c\/strong\u003e \u003cem\u003eif\u003c\/em\u003e, \u003cem\u003eset\u003c\/em\u003e, \u003cem\u003ecode\u003c\/em\u003e, \u003cem\u003eslack\u003c\/em\u003e, \u003cem\u003esticky note\u003c\/em\u003e, \u003cem\u003ehttp request\u003c\/em\u003e.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"N8N Commerce","offers":[{"title":"Default Title","offer_id":46217905864883,"sku":"N8N-20858","price":27.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0749\/6279\/6723\/files\/G7dPzleFjY6sYVh10fVYY_N3l5tYk3.png?v=1791882319","url":"https:\/\/buyflowscripts.com\/products\/n8n-workflow-fx-card-rate-check-with-frankfurter-slack","provider":"N8N Commerce","version":"1.0","type":"link"}