Connectors pull data from external services on a schedule. Unlike SDKs that push events in real-time, connectors reach out to APIs like GitHub or Shopify and bring metrics into Tell automatically.
Use connectors when you want to track data that lives outside your app — repository activity, store performance, or third-party metrics.
Available connectors
| Connector | What it pulls | Status |
|---|
| GitHub | Stars, forks, issues, PRs, commits | Ready |
| Shopify | Orders, revenue, customers, products, inventory | Partial |
GitHub
Track your repository metrics over time — stars, forks, open issues, pull requests, and commit activity.
Configuration
[connectors.my_repo]
type = "github"
entities = ["your-org/your-repo"]
schedule = "0 0 */6 * * *"
This pulls metrics from your repository every 6 hours. No token is needed for public repos, but adding one increases GitHub’s rate limit from 60 to 5,000 requests per hour.
With authentication
[connectors.my_repo]
type = "github"
entities = ["your-org/your-repo", "your-org/another-repo"]
schedule = "0 0 */6 * * *"
token = "ghp_your_github_token"
You can track multiple repositories from a single connector.
On-demand pull
tell pull github your-org/your-repo
Metrics
| Metric | Description |
|---|
stars | Stargazers count |
forks | Fork count |
watchers | Watcher count |
open_issues | Open issue count |
issues_open | Open issues (via search) |
issues_closed | Closed issues |
prs_open | Open pull requests |
prs_closed | Closed pull requests |
prs_merged | Merged pull requests |
commits | Commits in the last 30 days |
last_commit_at | Timestamp of the most recent commit |
size | Repository size in KB |
To pull only specific metrics, use the metrics field:
[connectors.my_repo]
type = "github"
entities = ["your-org/your-repo"]
schedule = "0 0 */6 * * *"
metrics = ["stars", "forks", "open_issues"]
This reduces the number of API calls per pull.
Shopify
Track your store’s performance — orders, revenue, customers, products, and inventory levels.
The Shopify connector is partially complete. Order and product metrics work. Some inventory and operations metrics are still in development.
Configuration
[connectors.my_store]
type = "shopify"
store = "mystore.myshopify.com"
access_token = "shpat_your_token"
entities = ["orders", "products", "customers"]
schedule = "0 0 */6 * * *"
Entities
Pull specific categories of data by listing them in entities:
| Entity | What it pulls |
|---|
orders | Order count, revenue (today, 30-day), average order value |
products | Total and active product counts |
customers | Total and new customer counts (30-day) |
operations | Unfulfilled orders, refunds, abandoned checkouts, inventory |
all | Everything above — continues even if one category fails |
On-demand pull
Connectors use 6-field cron expressions (with seconds):
┌──────── second (0-59)
│ ┌────── minute (0-59)
│ │ ┌──── hour (0-23)
│ │ │ ┌── day of month (1-31)
│ │ │ │ ┌ month (1-12)
│ │ │ │ │ ┌ day of week (0-6, Sun=0)
│ │ │ │ │ │
0 0 */6 * * * ← every 6 hours
0 30 9 * * 1-5 ← weekdays at 9:30am
0 0 0 * * * ← midnight daily
Resilience
Connectors handle failures automatically:
- Retries — up to 3 attempts with exponential backoff on transient errors
- Circuit breaker — after 5 consecutive failures, pauses for 10 minutes before trying again
- Timeouts — 30-second per-request timeout, 5-minute overall timeout per pull
- Rate limiting — respects
429 responses and waits before retrying
Advanced options
Both connectors share these optional fields:
| Field | Default | Description |
|---|
timeout_secs | 30 | Per-request timeout |
max_retries | 3 | Retry attempts on failure |
workspace_id | 1 | Route data to a specific workspace |
metrics | all | Filter to specific metrics (reduces API calls) |
For GitHub specifically:
| Field | Default | Description |
|---|
token | — | GitHub personal access token |
api_url | https://api.github.com | Custom API URL (for GitHub Enterprise) |
For Shopify:
| Field | Default | Description |
|---|
access_token | — | Shopify Admin API access token |
api_version | 2024-01 | Shopify API version |
What’s next