Operated by Sourcelane✓ verified
Track new followers and unfollowers of any public Instagram profile. Schedule runs to get one row per follow, unfollow and following change.
A tool for detecting and recording changes to public Instagram profiles' followers and following lists by comparing each run's current list to a persisted snapshot. The connector reads public follower/following lists without requiring login, performs paginated reads of the full list for each tracked profile, and emits one record per detected change (new follow, unfollow, or initial baseline snapshot) including the identity details of the account that changed and timestamps for detection and prior snapshot. It also produces a per-profile summary with totals and status metadata. Technical mechanisms include persisted named snapshots to maintain history between runs, optional emission of the full list on first run, confirmation logic that requires an absent account to remain missing across runs before reporting an unfollow, immediate reporting of new followers based on list ordering, support for tracking followers, following, or both, and the ability to track multiple profiles in parallel. Run frequency is configurable so changes can be detected on a schedule; run time scales with the size of tracked lists.
Verified Oct 25, 10:11 PM
$0.00015
per follower scanned
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Unfollower tracking
See exactly who unfollowed a brand or creator account and when
Audience growth monitoring
Get daily lists of new followers to welcome, qualify, or add to CRM workflows
Competitor analysis
Monitor who starts following a competitor and subsequent following behavior
Influencer vetting
Detect follow-for-follow churn and sudden follower spikes
Lead generation
Convert new followers of niche accounts into daily lists of warm leads
Public Instagram profiles to track.
Name of the key-value store that keeps snapshots between runs.
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"instagram-follower-tracker","params":{"usernames":["raycastapp"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
usernames | array | required | Public Instagram profiles to track (with or without @). Each one keeps its own snapshot between runs. |
mode | string | optional | Track the followers list, the following list, or both. |
maxFollowers | integer | optional | Safety cap on how many accounts are read from each list per run (most recent first). If a list is bigger than this, new followers are still detected but unfollow detection is turned off for that list. Set 0 for no cap. |
emitBaselineList | boolean | optional | On the first run for an account there is nothing to compare against. Off (default): output one baseline summary row with the list size. On: also output every account in the list as a 'baseline' row (charged per row). |
snapshotStoreName | string | optional | Name of the key-value store that keeps snapshots between runs. Use a different name to keep separate tracking histories (e.g. one per client). Letters, digits and hyphens only. |
Each result contains
| Field | Type | Description |
|---|---|---|
trackedUsername | string | Tracked account |
list | string | List |
detectedAt | string | Detected at |
change | string | Change |
userId | null | User ID |
username | null | Username |
fullName | null | Name |
isVerified | null | Verified |
profilePicUrl | null | Avatar |
count | integer | Baseline count |
previousSnapshotAt | null | Previous snapshot |
Pick your tool and connect in under a minute. Then just ask — for example: “Pull the last 20 posts from @natgeo and tell me which formats get the most engagement.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"instagram-follower-tracker","params":{"usernames":["raycastapp"]},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "instagram-follower-tracker",
"params": {"usernames":["raycastapp"]},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…