Follow conditions are available through the Auto API. The in-app chat assistant cannot author them today, so build these plans by calling Create Query directly.
Follow Graph
Follow graph conditions trigger on new X follow edges Elfa detects. Three sources ask three questions about the same data:
| Source | Watch | Fires when |
|---|---|---|
x_follow_received | one account | someone starts following it |
x_follow_made | one account | it starts following someone |
x_follow_overlap | 2-25 accounts | several of them follow the same account |
x_follow_overlap is the convergence signal: three funds I track all followed
the same new project this week.
Follow conditions use the full EQL condition form and obey the standard limits:
they can be combined with other sources inside AND/OR groups, up to depth 3
and 10 leaf conditions. See Triggers.
Account Routing
x_follow_received and x_follow_made take a single args.account.
x_follow_overlap takes args.accounts, an array of 2 to 25 usernames.
Rules:
- Usernames, not numeric ids and not URLs.
- A leading
@is stripped and surrounding whitespace trimmed. - Lowercased for routing, so
@Elfa_AI,Elfa_AI, andelfa_aiare the same account. Duplicates inaccountscollapse to one. - 1 to 15 characters of letters, digits, or underscores.
- Validate/Create rejects accounts that could never match — see Validation Notes.
The watched account is always the one you name. What the condition measures differs by source, so read the Methods table before setting a threshold.
Methods
| Source | Method | Arguments | Operators | Measures |
|---|---|---|---|---|
x_follow_received | follower_count | account, window?, period? | >, >= | Follower count of the account that followed you |
x_follow_made | followee_follower_count | account, window?, period? | >, >= | Follower count of the account it followed |
x_follow_overlap | distinct_followers | accounts, window?, period? | >, >= | How many watched accounts followed the same account |
Only > and >= are accepted. Results are capped at 500 rows ranked by
distinct watchers then follower count, so a downward comparison could silently
miss qualifying rows. crosses_above / crosses_below and dynamic
field-vs-field values are not supported.
Use the threshold to control noise. On x_follow_received and x_follow_made,
>= 0 matches every detected follow and a higher value narrows to accounts with
a real audience. On x_follow_overlap the floor is 2 — a threshold below that,
or above what the watched set can reach, is rejected at create time.
Window And Period
| Argument | Values | Default |
|---|---|---|
window | 6h, 12h, 24h, 48h, 72h, 7d | 24h, or 72h for x_follow_overlap |
period | 1h, 2h, 4h, 8h, 12h, 24h, 1d, 7d | 1h |
window is the lookback over detection time. period is the minimum
interval between reads. A period longer than window is silently clamped down
to window at evaluation time rather than rejected — reading less often than the
window would let follows age out unseen.
Coverage And Limits
Read this before building a plan. Follow data is collected periodically rather than streamed from X, so coverage is deliberately bounded.
| Limit | Detail |
|---|---|
| Which follows are visible | Only accounts Elfa monitors are checked. A follow by an account outside that set is not detected, and the plan stays silent. |
| Timing | Follows are picked up on a recurring check rather than streamed, so alerts are not real time. |
| Event timestamp | lastDetectedAt is when the follow was detected, not when it happened on X. window filters on detection time. |
| Newly added accounts | An account's pre-existing follows are not replayed as new when Elfa starts monitoring it. |
| Result cap | At most 500 matches per evaluation. A watched account with more new edges than that inside one window is reported partially. |
| Unfollows | Not detected. There is no condition for an account being unfollowed. |
| Inactive edges | Only edges still marked active are counted. |
| Re-follows | If an account unfollows and later follows again, the repeat follow is not re-emitted. |
The first row is the one to plan around. A quiet plan means no tracked account made that follow — it does not prove nobody did.
x_follow_made and x_follow_overlap read the watched account's own following
list, so those accounts must themselves be ones Elfa monitors.
x_follow_received has no such requirement: it is the followers that must be
monitored, and those can be any account Elfa tracks.
Runtime Semantics
Each matched account is a distinct event.
- Without
repeat, the first match triggers the plan once and moves it to a terminal state. - With
repeat, the plan fires once per distinct matched account. - Use
repeat.cooldown: "0"for "notify me about every one" plans. - A matched account will not fire again while it stays inside
window. Forx_follow_overlap, an account fires again only if a further watched account follows it inside the same window. - Preview is not available before execution: a follow condition reports no value until its first scheduled evaluation.
Trigger Payload
All three sources carry the same shape:
{
"condition": {
"source": "x_follow_overlap",
"method": "distinct_followers",
"args": { "accounts": ["pantheracapital", "a16z", "paradigm"] },
"operator": ">=",
"value": 2
},
"match": {
"observedValue": 3,
"matchedUsername": "newprotocol",
"matchedFollowerCount": 1163,
"watchedUsernames": ["pantheracapital", "a16z", "paradigm"],
"distinctWatched": 3,
"lastDetectedAt": "2026-09-09T10:48:08.636Z"
}
}
matchedUsername— the account the condition matched on. The new follower forx_follow_received; the newly followed account for the other two.matchedFollowerCount— that account's own follower count at detection time.watchedUsernames— which of your watched accounts were involved.distinctWatched— how many. Always1except forx_follow_overlap.lastDetectedAt— when the newest edge in the match was detected.observedValue— the value the operator compared against.
Examples
Convergence Across A Watched Set
Fires when at least 2 of the tracked funds follow the same account within 72 hours.
{
"title": "Fund convergence",
"description": "Notify when 2+ tracked funds follow the same new account.",
"conditions": {
"AND": [
{
"source": "x_follow_overlap",
"method": "distinct_followers",
"args": {
"accounts": ["pantheracapital", "a16z", "paradigm"],
"window": "72h"
},
"operator": ">=",
"value": 2
}
]
},
"actions": [
{
"stepId": "step_1",
"type": "notify",
"params": { "message": "2+ tracked funds followed the same account" }
}
],
"expiresIn": "168h",
"repeat": { "cooldown": "0", "maxTriggers": 50 }
}
For HTTP calls, wrap conditions, actions, expiresIn, and repeat under a
top-level query key. See HTTP Request Wrapper.
Any New Follower On A Watched Account
{
"source": "x_follow_received",
"method": "follower_count",
"args": { "account": "elfa_ai" },
"operator": ">=",
"value": 0
}
Only Notable New Followers
{
"source": "x_follow_received",
"method": "follower_count",
"args": { "account": "elfa_ai" },
"operator": ">",
"value": 50000
}
What A Tracked Account Starts Following
{
"source": "x_follow_made",
"method": "followee_follower_count",
"args": { "account": "cobie", "window": "24h" },
"operator": ">",
"value": 10000
}
Validation Notes
Common errors:
| Error signal | What it means | Next action |
|---|---|---|
EQL_INVALID_ARG_VALUE with "expected an X username" | The handle is not 1 to 15 letters, digits, or underscores. | Pass the handle only — no URL, no numeric id. A leading @ is fine. |
EQL_INVALID_ARG_VALUE with "X account was not found" | The handle does not resolve to an X account. | Check the spelling and re-validate. |
EQL_INVALID_ARG_VALUE with "Elfa does not index this account" | The account exists on X but Elfa holds no record of it, so no follow edge can ever match it. | Watch an account Elfa tracks. |
EQL_INVALID_ARG_VALUE with "Elfa does not track this account's follows" | x_follow_made / x_follow_overlap on an account Elfa does not monitor for follows. | Use x_follow_received, or watch a monitored account. |
| Invalid operator | Anything other than > or >=. | Use > or >=. |
| Threshold rejected | value on x_follow_overlap is below 2, or above what the set can reach — >= N can reach the number of watched accounts, > N only one below it. | Lower the threshold or widen accounts. |
| Plan is active but never fires | No tracked account made a matching follow. | See Coverage And Limits. |