Skip to content

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 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.

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.

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.
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
Field Type Description
result any The Power BI API response
{
"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}"
}
]
}
{
"workspace_id": "12345678-1234-1234-1234-123456789012",
"dataset_id": "87654321-4321-4321-4321-210987654321",
"access_token": "${powerbi_token}",
"operation": "refresh_dataset"
}
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_rows for streaming scraped data into dashboards in real time.
  • Use refresh_dataset after pushing rows to update all visuals immediately.
  • The table name must match a table defined in your Power BI dataset schema.

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.

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.

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.
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)
Field Type Description
result any The Tableau REST API response
{
"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"
}
{
"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"
}
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_datasource after pushing data to ensure Tableau visuals reflect the latest data.
  • Use get_workbooks to discover available workbooks before configuring other integrations.

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.

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.

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:
Field Type Description
response string Slack response text (usually "ok" on success)
{
"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:"
}
{
"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"
}
  1. Go to api.slack.com/apps.
  2. Click Create New App → From scratch.
  3. Name your app (e.g., “RTILA Scraper”) and choose your workspace.
  4. In the left sidebar, click Incoming Webhooks.
  5. Toggle Activate Incoming Webhooks to On.
  6. Scroll down and click Add New Webhook to Workspace.
  7. Choose the channel the bot will post to.
  8. Click Allow.
  9. 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 channel parameter to override the default channel per trigger.
  • Use icon_emoji to give your bot a recognizable avatar (e.g., :robot_face:, :spider:, :warning:).

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.

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.

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)
Field Type Description
response string Teams response text
{
"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"
}
{
"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"
}
  1. Open Microsoft Teams and navigate to the channel where you want notifications.
  2. Click the ⋯ (more options) button next to the channel name.
  3. Click Connectors.
  4. Search for Incoming Webhook and click Configure.
  5. Give the webhook a name (e.g., “RTILA Scraper”).
  6. Optionally upload a custom image for the webhook avatar.
  7. Click Create.
  8. Copy the Webhook URL.
  9. Click Done.
  • Use theme_color to visually distinguish message types (green for success, red for errors).
  • Use the title parameter to make messages scannable in busy channels.
  • Use ${variable} substitution to include dynamic data.
  • Teams MessageCards support basic formatting. Use \n for line breaks.

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.

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.

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.
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
{
"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
}
{
"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_code output in subsequent triggers to verify the request succeeded.
  • Use timeout to prevent long-running requests from blocking your automation.
  • Use PUT or PATCH for updating existing records, POST for creating new ones.
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

You can chain multiple BI triggers together. For example:

Pattern: Scrape → Push to Power BI → Notify Slack

  1. Power BI — Push scraped data to a Power BI dataset.
  2. Slack Webhook — Send a notification that the data has been pushed.

Pattern: Scrape → Refresh Tableau → Notify Teams

  1. Tableau — Refresh a Tableau data source.
  2. Teams Webhook — Send a notification that the data source has been refreshed.
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
##