BI Tools & Alerting Triggers
BI (Business Intelligence) tools turn raw data into visual reports, dashboards, and alerts. RTILA X integrates with the most popular BI platforms and team messaging tools so your scraped data flows directly into the tools your team already uses.
Instead of manually copying data into a dashboard or copying a summary into a Slack channel, these triggers deliver your data automatically — every single time your automation runs.
RTILA X provides five BI Tools & Alerting triggers:
| Trigger | Purpose |
|---|---|
| Power BI | Push data to Power BI datasets and refresh dashboards |
| Tableau | Refresh Tableau data sources and retrieve workbooks |
| Slack Webhook | Send notifications to Slack channels |
| Microsoft Teams Webhook | Send notifications to Teams channels |
| Generic Webhook | Send data to any URL via HTTP |

Power BI
Section titled “Power BI”Power BI is Microsoft’s business intelligence platform for creating interactive dashboards and reports. The Power BI trigger pushes scraped data directly into Power BI datasets, so your dashboards update automatically.
Description
Section titled “Description”The Power BI trigger interacts with the Microsoft Power BI REST API. You can push rows of data into a dataset, trigger a dataset refresh, or list available datasets. This allows your scraped data to flow directly into Power BI dashboards without manual intervention.
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_id |
string | ✅ Yes | The Power BI workspace ID. Found in the Power BI service URL when viewing a workspace. |
dataset_id |
string | ✅ Yes | The Power BI dataset ID. Found in the dataset settings in the Power BI service. |
access_token |
string | ✅ Yes | An Azure AD access token with Power BI API permissions. Supports ${variable} substitution. |
operation |
string | ✅ Yes | The operation to perform. Options: push_rows, refresh_dataset, get_datasets. |
table_name |
string | No | The table name within the dataset to push rows into. Required for push_rows. |
rows |
list | No | The row data to push. Required for push_rows. Supports ${variable} substitution. |
Operations
Section titled “Operations”| Operation | Description | Required Parameters |
|---|---|---|
push_rows |
Pushes rows of data into a Power BI dataset table | table_name, rows |
refresh_dataset |
Triggers a refresh of the dataset, updating all visuals | None |
get_datasets |
Lists all datasets in the workspace | None |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
result |
any | The Power BI API response |
Example: Push Scraped Data to Power BI
Section titled “Example: Push Scraped Data to Power BI”{ "workspace_id": "12345678-1234-1234-1234-123456789012", "dataset_id": "87654321-4321-4321-4321-210987654321", "access_token": "${powerbi_token}", "operation": "push_rows", "table_name": "ScrapedProducts", "rows": [ { "ProductName": "${product_name}", "Price": "${product_price}", "ScrapedAt": "${date}" } ]}Example: Refresh a Dataset
Section titled “Example: Refresh a Dataset”{ "workspace_id": "12345678-1234-1234-1234-123456789012", "dataset_id": "87654321-4321-4321-4321-210987654321", "access_token": "${powerbi_token}", "operation": "refresh_dataset"}Getting Power BI IDs
Section titled “Getting Power BI IDs”| ID | Where to Find It |
|---|---|
| Workspace ID | Power BI service → Open workspace → Look at the URL: app.powerbi.com/groups/<workspace_id>/... |
| Dataset ID | Power BI service → Datasets → Click dataset → Settings → Dataset ID |
| Access Token | Generate via Azure AD OAuth2 flow, or use the Power BI REST API to obtain one |
- Store your access token as a project variable to avoid hardcoding it.
- Use
push_rowsfor streaming scraped data into dashboards in real time. - Use
refresh_datasetafter pushing rows to update all visuals immediately. - The table name must match a table defined in your Power BI dataset schema.
Tableau
Section titled “Tableau”Tableau is a leading data visualization platform used for creating interactive dashboards. The Tableau trigger refreshes data sources and retrieves workbooks via the Tableau Server REST API.
Description
Section titled “Description”The Tableau trigger authenticates with Tableau Server using a personal access token and performs operations like refreshing data sources or listing workbooks. This allows your scraped data to automatically update Tableau visualizations.
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
server_url |
string | ✅ Yes | The Tableau Server URL. Example: https://tableau.company.com |
site_id |
string | ✅ Yes | The Tableau site ID. Found in the Tableau site URL. |
token_name |
string | ✅ Yes | The name of your Personal Access Token. Created in Tableau under My Account Settings. |
token_secret |
string | ✅ Yes | The secret associated with your Personal Access Token. Shown only once when created. |
operation |
string | ✅ Yes | The operation to perform. Options: refresh_datasource, get_workbooks. |
datasource_id |
string | No | The data source ID to refresh. Required for refresh_datasource. |
project_id |
string | No | Filter workbooks by project. Optional filter for get_workbooks. |
Operations
Section titled “Operations”| Operation | Description | Required Parameters |
|---|---|---|
refresh_datasource |
Triggers a refresh of a Tableau data source | datasource_id |
get_workbooks |
Lists workbooks, optionally filtered by project | None (project_id optional) |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
result |
any | The Tableau REST API response |
Example: Refresh a Data Source
Section titled “Example: Refresh a Data Source”{ "server_url": "https://tableau.company.com", "site_id": "my-site", "token_name": "rtila-integration-token", "token_secret": "my-token-secret-value", "operation": "refresh_datasource", "datasource_id": "ds-12345-abcde"}Example: List Workbooks in a Project
Section titled “Example: List Workbooks in a Project”{ "server_url": "https://tableau.company.com", "site_id": "my-site", "token_name": "rtila-integration-token", "token_secret": "my-token-secret-value", "operation": "get_workbooks", "project_id": "proj-98765"}Getting Tableau Credentials
Section titled “Getting Tableau Credentials”| Credential | Where to Find It |
|---|---|
| Server URL | Your Tableau Server address (ask your Tableau admin) |
| Site ID | Tableau → Site settings → Site ID |
| Token Name | Tableau → My Account Settings → Personal Access Tokens → Create New Token |
| Token Secret | Shown only once when you create the token. Save it immediately. |
- Create a dedicated Personal Access Token for RTILA X integration.
- Store the token secret as a project variable — it’s only shown once when created.
- Use
refresh_datasourceafter pushing data to ensure Tableau visuals reflect the latest data. - Use
get_workbooksto discover available workbooks before configuring other integrations.
Slack Webhook
Section titled “Slack Webhook”Slack is the most popular team messaging platform. The Slack Webhook trigger sends a notification message to a Slack channel, letting your team know when a scraping run completes, fails, or produces notable results.
Description
Section titled “Description”The Slack Webhook trigger sends a message to a Slack channel using Slack’s Incoming Webhooks. Incoming Webhooks are a simple way to post messages into Slack channels. You create a webhook URL in Slack, paste it into RTILA X, and every time your automation runs, a message appears in your Slack channel.
Parameters
Section titled “Parameters”| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
webhook_url |
string | ✅ Yes | — | The Slack Incoming Webhook URL. Created in Slack under Apps → Incoming Webhooks. |
message |
string | ✅ Yes | — | The message text to send. Supports ${variable} substitution. |
channel |
string | No | Webhook default | Override the channel the message is sent to. Example: #scraping-alerts |
username |
string | No | Webhook default | Override the display name of the bot. Example: RTILA Scraper |
icon_emoji |
string | No | Webhook default | Override the bot’s avatar emoji. Example: :robot_face: |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
response |
string | Slack response text (usually "ok" on success) |
Example: Send a Completion Notification
Section titled “Example: Send a Completion Notification”{ "webhook_url": "https://hooks.slack.com/services/T00000/B00000/XXXXXXXXXXXXXXXXXXXXXXXX", "message": "✅ Scrape complete!\n\n*Project:* ${project_name}\n*Records:* ${record_count}\n*URL:* ${target_url}\n*Time:* ${completion_time}", "channel": "#scraping-alerts", "username": "RTILA Scraper", "icon_emoji": ":robot_face:"}Example: Send an Error Alert
Section titled “Example: Send an Error Alert”{ "webhook_url": "https://hooks.slack.com/services/T00000/B00000/XXXXXXXXXXXXXXXXXXXXXXXX", "message": "⚠️ *AUTOMATION FAILED*\n\n*Project:* ${project_name}\n*Error:* ${last_error}\n*Time:* ${completion_time}", "channel": "#devops-alerts", "username": "RTILA Alert Bot"}Creating a Slack Webhook
Section titled “Creating a Slack Webhook”- Go to api.slack.com/apps.
- Click Create New App → From scratch.
- Name your app (e.g., “RTILA Scraper”) and choose your workspace.
- In the left sidebar, click Incoming Webhooks.
- Toggle Activate Incoming Webhooks to On.
- Scroll down and click Add New Webhook to Workspace.
- Choose the channel the bot will post to.
- Click Allow.
- Copy the Webhook URL (starts with
https://hooks.slack.com/services/...).
- Store the webhook URL as a project variable to avoid hardcoding it.
- Use Slack’s formatting syntax (
*bold*,_italic_,>for quotes) for rich messages. - Use
${variable}substitution to include dynamic data in your messages. - Use the
channelparameter to override the default channel per trigger. - Use
icon_emojito give your bot a recognizable avatar (e.g.,:robot_face:,:spider:,:warning:).
Microsoft Teams Webhook
Section titled “Microsoft Teams Webhook”Microsoft Teams is Microsoft’s team collaboration platform. The Teams Webhook trigger sends a notification message to a Teams channel, keeping your team informed about scraping results.
Description
Section titled “Description”The Microsoft Teams Webhook trigger sends a message to a Teams channel using Teams’ Incoming Webhooks. The message is formatted as a MessageCard, which supports a title, body text, and theme color.
Parameters
Section titled “Parameters”| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
webhook_url |
string | ✅ Yes | — | The Teams Incoming Webhook URL. Created in Teams under Channel → Connectors → Incoming Webhook. |
message |
string | ✅ Yes | — | The message text to send. Supports ${variable} substitution. |
title |
string | No | — | The title displayed at the top of the message card. |
theme_color |
string | No | — | The theme color hex code for the message card. Example: 0076D7 (blue) |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
response |
string | Teams response text |
Example: Send a Completion Notification
Section titled “Example: Send a Completion Notification”{ "webhook_url": "https://company.webhook.office.com/webhookb2/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/IncomingWebhook/xxxxxxxx/xxxxxxxx", "message": "Scrape complete!\n\nProject: ${project_name}\nRecords: ${record_count}\nURL: ${target_url}\nTime: ${completion_time}", "title": "RTILA Scrape Complete", "theme_color": "0076D7"}Example: Send an Error Alert
Section titled “Example: Send an Error Alert”{ "webhook_url": "https://company.webhook.office.com/webhookb2/xxxxxxxx/IncomingWebhook/xxxxxxxx", "message": "AUTOMATION FAILED\n\nProject: ${project_name}\nError: ${last_error}\nTime: ${completion_time}", "title": "⚠️ Automation Alert", "theme_color": "FF0000"}Creating a Teams Webhook
Section titled “Creating a Teams Webhook”- Open Microsoft Teams and navigate to the channel where you want notifications.
- Click the ⋯ (more options) button next to the channel name.
- Click Connectors.
- Search for Incoming Webhook and click Configure.
- Give the webhook a name (e.g., “RTILA Scraper”).
- Optionally upload a custom image for the webhook avatar.
- Click Create.
- Copy the Webhook URL.
- Click Done.
- Use
theme_colorto visually distinguish message types (green for success, red for errors). - Use the
titleparameter to make messages scannable in busy channels. - Use
${variable}substitution to include dynamic data. - Teams MessageCards support basic formatting. Use
\nfor line breaks.
Generic Webhook
Section titled “Generic Webhook”The Generic Webhook trigger sends an HTTP request to any URL. This is the most flexible alerting trigger because it works with any service that accepts HTTP requests — not just Slack or Teams.
Description
Section titled “Description”The Generic Webhook trigger sends an HTTP request (GET, POST, PUT, or PATCH) to any URL you specify. You can send any payload, set custom headers, and choose the HTTP method. This makes it compatible with virtually any web service, API, or notification system.
Parameters
Section titled “Parameters”| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url |
string | ✅ Yes | — | The target URL to send the request to. Supports ${variable} substitution. |
payload |
any | ✅ Yes | — | The request payload to send. Can be a JSON object, string, or array. Supports ${variable} substitution. |
method |
string | No | POST |
The HTTP method. Options: GET, POST, PUT, PATCH. |
headers |
object | No | — | Custom HTTP headers as key-value pairs. Example: {"Authorization": "Bearer ${api_key}"} |
timeout |
integer | No | 30 |
Timeout in seconds. If the request takes longer than this, it fails. |
Output
Section titled “Output”| Field | Type | Description |
|---|---|---|
status_code |
integer | The HTTP status code returned by the server (e.g., 200, 404, 500) |
response_text |
string | The raw response body as a string |
response_json |
any | The parsed JSON response, or null if the response is not valid JSON |
Example: Send Data to a Custom API
Section titled “Example: Send Data to a Custom API”{ "url": "https://api.company.com/webhooks/scrape-results", "payload": { "project": "${project_name}", "records": "${record_count}", "url": "${target_url}", "timestamp": "${completion_time}" }, "method": "POST", "headers": { "Authorization": "Bearer ${api_key}", "Content-Type": "application/json" }, "timeout": 30}Example: Send a GET Request
Section titled “Example: Send a GET Request”{ "url": "https://api.company.com/status?project=${project_name}", "payload": {}, "method": "GET", "timeout": 15}- Use the Generic Webhook when no dedicated trigger exists for your destination.
- Use
${variable}substitution in the URL, headers, and payload for dynamic data. - Check the
status_codeoutput in subsequent triggers to verify the request succeeded. - Use
timeoutto prevent long-running requests from blocking your automation. - Use
PUTorPATCHfor updating existing records,POSTfor creating new ones.
Choosing the Right BI Tool Trigger
Section titled “Choosing the Right BI Tool Trigger”| Scenario | Recommended Trigger |
|---|---|
| Your team uses Power BI dashboards | Power BI |
| Your team uses Tableau dashboards | Tableau |
| Your team communicates via Slack | Slack Webhook |
| Your team communicates via Teams | Microsoft Teams Webhook |
| You need to send data to a custom API | Generic Webhook |
| You need to send data to a service not listed | Generic Webhook |
| You need to send data to multiple destinations | Use multiple triggers in sequence |
Combining BI Triggers
Section titled “Combining BI Triggers”You can chain multiple BI triggers together. For example:
Pattern: Scrape → Push to Power BI → Notify Slack
- Power BI — Push scraped data to a Power BI dataset.
- Slack Webhook — Send a notification that the data has been pushed.
Pattern: Scrape → Refresh Tableau → Notify Teams
- Tableau — Refresh a Tableau data source.
- Teams Webhook — Send a notification that the data source has been refreshed.
Error Handling
Section titled “Error Handling”| Error | Cause | Solution |
|---|---|---|
| Authentication failed | Wrong API key, token, or webhook URL | Verify your credentials |
| 404 Not Found | Wrong workspace/dataset/datasource ID | Verify the ID in your BI platform |
| Timeout | Request took too long | Increase the timeout parameter |
| Invalid payload | Malformed JSON or wrong data format | Check your payload structure |
| Permission denied | Insufficient permissions | Check API permissions in your BI platform |
| Rate limited | Too many requests | Add delays between runs or reduce frequency |
##