# Brand Switching: 4 API Calls to Find Who Left Evernote (https://www.socialcrawl.dev/blog/find-customers-switching-from-competitors)
> Brand switching from public posts: find people who say they left a competitor, in their own words, with the reason and a link. Four live API calls on Evernote.
One request to `/v1/search/everywhere` with `switch_from=Evernote` returned 3 linked posts where a person says they left Evernote, each with a verbatim quote, a reason and, for two of them, a destination. That is brand switching read from public posts, with who left a competitor told in their own words. The stack is four endpoints, `/v1/search/everywhere`, `/v1/reddit/search/comments`, `/v1/twitter/search/tweets` and `/v1/search/forums`, all behind one API key.
There is no churn rate here, and no "X% of Evernote users leave". On every `switch_from=` call below, `headline` is null and `share` is null. What you get is rows read, receipts and undecided, plus the links so a person can check each one.
We ran four real calls on 2026-10-02 against production, with `Cache-Control: no-cache` on each. One earlier attempt, a query for Starbucks, found nothing, and that failure is in here too.
## How do I find posts where someone says they left a brand?
Add `switch_from=` to a `/v1/search/everywhere` request. The response keeps its ranked `items` and gains `data.switch_receipts`: for each post that passes the check, a link, a verbatim quote, a reason, a destination when one was picked out, and a confidence score.
```bash
curl "https://www.socialcrawl.dev/v1/search/everywhere?query=switched%20from%20Evernote&switch_from=Evernote" \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache"
```
The call cost 20 credits as captured (`x-credits-used: 20`), and `switch_from=` adds no charge to the call. Here are all 3 receipts it returned. The third quote is longer in the raw response and is trimmed here with an ellipsis.
```json
{
"policy_version": "d13-2026-09-23",
"brand": "Evernote",
"receipts": [
{
"id": "https://reddit.com/r/pkms/comments/1wsmohv/after_12_years_canceled_evernote",
"permalink": "https://www.reddit.com/r/PKMS/comments/1wsmohv/after_12_years_canceled_evernote/",
"quote": "After 12 years canceled evernote\nEven after 40% discount evernote price is doubled in one year. Just canceled it and moved to Apple Notes. Had to write some scripts to add the source URL to notes. If anyone need it let me know.",
"reason": "price",
"destination": "Apple Notes",
"confidence": 0.98
},
{
"id": "https://medium.com/@christian_maehler/why-and-how-i-switched-from-evernote-to-apple-notes-1bffde05eee9",
"permalink": "https://medium.com/@christian_maehler/why-and-how-i-switched-from-evernote-to-apple-notes-1bffde05eee9",
"quote": "Why and How I Switched from Evernote to Apple Notes\nSearch speed: Apple Notes is way faster to search notes than Evernote not to mention the incredibly fast startup time when starting the app on",
"reason": "product_quality",
"destination": "Apple Notes\nSearch",
"confidence": 0.95
},
{
"id": "https://organizeyourfamilyhistory.com/switching-from-evernote-to-apple-notes",
"permalink": "https://organizeyourfamilyhistory.com/switching-from-evernote-to-apple-notes",
"quote": "Switching from Evernote to Apple Notes - Organize Your Family History\nI made the same decision to leave my paid Evernote plan and downgrade to a free plan, for just the same reasons. I switched to a free account 2 months ago. [...]",
"reason": "price",
"destination": null,
"confidence": 0.89
}
],
"headline": null
}
```
The reasons are price, product_quality and price. The second destination is the raw string `"Apple Notes\nSearch"`. It is a text capture from the post, not a normalised brand name, so clean it before you group by it.
Next to the receipts sits a count table in `data.switch_receipts.count`:
| Field | Value |
|---|---|
| `n` | 24 |
| `counted` | 3 |
| `abstained` | 7 |
| `share` | null |
| `headline` | null |
Read it as 24 rows read, 3 receipts, 7 undecided. The response also carries a 90% `interval`, which describes only the rows this search read on this day. It is not a random sample of anyone, so do not treat it as a churn estimate.
Three receipts out of 24 rows looks thin, and that is the check working. A joke, a switch away from a different brand and a row the check is not confident about stay out of `switch_receipts`. A keyword filter of your own would have to make those same calls one by one, and `/v1/search/everywhere` (see [the social search engine post](/blog/social-search-engine)) hands you the result.
### Why does the bare query "Starbucks" return zero receipts?
The first attempt was `query=Starbucks&switch_from=Starbucks`. It returned zero receipts on all three calls (everywhere, Reddit comments and X), with n at 24, 22 and 20 and counted at 0 each time. `switch_from=` judges the rows that came back, and the query decides which rows come back. A bare brand name is not a switching query.
Use switching language in the query, such as "switched from Evernote". After the Starbucks miss we probed Spotify, Notion and Adobe on Reddit comments and Spotify and Notion on X, at 1 credit each, with the query worded for each brand. Spotify and Notion gave 4 and 6 Reddit receipts and 1 X receipt each, and Adobe gave 4 on Reddit. Evernote gave 11 on Reddit and 8 on X, the most on both, which is why it is the brand in every example here. A Notion run on universal search did return 7 receipts, more than Evernote's 3 there. So the set you are reading was picked for its Reddit and X results, not drawn at random. None of this shows that Starbucks has no switchers, only that this query found none.
## Can I search Reddit comments only?
Yes. `/v1/reddit/search/comments` takes the same `switch_from=` parameter, and it is where the reasons get specific. Our [Reddit comment search](/blog/reddit-api-more-per-credit) is billed at 1 credit as captured, and `switch_from=` adds nothing on top.
```bash
curl "https://www.socialcrawl.dev/v1/reddit/search/comments?query=switched%20from%20Evernote&switch_from=Evernote" \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache"
```
The count was `n` 21, `counted` 11, `abstained` 7, with `share` and `headline` null. Of the 11 receipts, 6 gave price as the reason and 5 gave product_quality. A destination was named on 5 of the 11 (Notesnook, Fibery, Notion, Joplin and Joplin Cloud) and was null on the other 6. Three of them, verbatim:
```json
[
{
"id": "p22ty0j",
"permalink": "https://www.reddit.com/r/Switzerland/comments/1vh6lzc/comment/p22ty0j/",
"quote": "Evernote - crazy price change, switched to another alternative, very happy. Sad though I was such a big fan from the very beginning…",
"reason": "price", "destination": null, "confidence": 0.96
},
{
"id": "p5zwrwu",
"permalink": "https://www.reddit.com/r/Evernote/comments/1vy0qeh/comment/p5zwrwu/",
"quote": "It’s not just about the free tier. I left because the price of the Evernote Personal subscription more than doubled last year. I was fine paying $120 a year, but unwilling to shell out $250 for new features I didn’t need. The thing that set Evernote apart from other tools for me was its web clipper, so I switched to Notesnook, which has a decent one. For $60/yr, it’s a solid 80/20 solution. [...]",
"reason": "price", "destination": "Notesnook", "confidence": 0.98
},
{
"id": "p3plyht",
"permalink": "https://www.reddit.com/r/joplinapp/comments/1vo7m2y/comment/p3plyht/",
"quote": "I feel that. I (finally) switched to self-hosted Joplin from Evernote (due to the latest frankly outrageous price hike) and really appreciate the functionality so far, migration of my notes went smooth too. [...]",
"reason": "price", "destination": null, "confidence": 0.98
}
]
```
The second one is the payoff. It gives the old price ($120 a year), the price that drove the person out ($250), the feature they needed (the web clipper) and the replacement and its price (Notesnook, $60/yr), all in the customer's words. A win/loss interview is meant to produce exactly this.
The third shows a limit. The text names self-hosted Joplin, and `destination` is still null. The field is filled when a name in the text was chosen, so a named destination in the quote does not guarantee a captured one.
The check can also be generous. Receipt `p2oj4q5`, from r/Anytype, was returned with reason product_quality and confidence 0.9. It is a long comment that lists Evernote among apps the author "previously used", which is weaker evidence of a switch than the three above. Receipts are for a person to read. Do not treat them as verified.
### What does Reddit sentiment analysis look like once you have receipts?
Each receipt carries a `reason` you can quote and a link you can open, so a Reddit sentiment analysis gives you a reading list. In this pull, 6 of 11 Reddit receipts gave price and 5 gave product quality. That is a count of what 11 comments said, and nothing more.
## Does it work on X (Twitter)?
`/v1/twitter/search/tweets` works the same way and also cost 1 credit as captured, with no extra for `switch_from=`.
```bash
curl "https://www.socialcrawl.dev/v1/twitter/search/tweets?query=switched%20from%20Evernote&switch_from=Evernote" \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache"
```
The count was `n` 20, `counted` 8, `abstained` 11, with `share` and `headline` null. Of the 8 receipts, 7 gave product_quality and 1 gave price. Destinations were Notion twice, then Emacs, OneNote and Obsidian, with null on three. Two of them, verbatim:
```json
[
{
"id": "1978854605388702147",
"permalink": "https://x.com/jasalt_/status/1978854605388702147",
"quote": "@ovstoica Second to that. Switched to Emacs & org-mode from Evernote when it's shittification started in 2012 and never looked back, can recommend.",
"reason": "product_quality", "destination": "Emacs", "confidence": 0.94
},
{
"id": "1965963462011650427",
"permalink": "https://x.com/shauncooley/status/1965963462011650427",
"quote": "@fedesimio @robbdiazz I really tried post acquisition, premium from 2009 until about a month ago. You guys absolutely destroyed Evernote. It got so bad that I switched to OneNote, and do you have any idea how terrible OneNote is???",
"reason": "product_quality", "destination": "OneNote", "confidence": 0.97
}
]
```
One more X receipt, id `1998052204734034420`, has reason product_quality and a null destination, even though the post goes on to praise Notion. It opens with "i switched from evernote to notion about 6 years ago" and then goes on about Notion's growth. The first sentence earns it the receipt, and the rest of the thread is why you cite the link and not the whole text.
Here are the three calls side by side.
| Call | Credits | Rows read (n) | Receipts (counted) | Undecided (abstained) | share | headline |
|---|---|---|---|---|---|---|
| `search/everywhere` | 20 | 24 | 3 | 7 | null | null |
| `reddit/search/comments` | 1 | 21 | 11 | 7 | null | null |
| `twitter/search/tweets` | 1 | 20 | 8 | 11 | null | null |
These are three different samples of different sizes. Do not add them up and do not divide one by another.
## How do I read the stance on any query?
Two endpoints return a stance, and they return it differently.
On `/v1/search/everywhere`, `data.stance_split` comes back in the same response as the receipts, so there is no new request and no new charge. It counts the stance each post takes on your query, per platform and overall, with the ids behind every count. Stance here is each post's stance on the query you sent (positive, negative, neutral or no opinion). The `overall` block:
| Field | Value |
|---|---|
| `posts` | 40 |
| `counted` | 7 |
| `positive` | 1 |
| `negative` | 3 |
| `neutral` | 3 |
| `no_opinion` | 15 |
| `uncertain` | 18 |
| `unjudged` | 0 |
A `confidence_floor` of 0.5 sits beside `overall` in `stance_split`. Only 7 of 40 posts were counted. The ids behind them, as returned:
| Stance | Count | Ids |
|---|---|---|
| negative | 3 | `https://reddit.com/r/pkms/comments/1wsmohv/after_12_years_canceled_evernote`, `https://youtube.com/watch?v=li9yfsutu0i`, `https://github.com/mlebkowski/clips/issues/2` |
| positive | 1 | `https://medium.com/@christian_maehler/why-and-how-i-switched-from-evernote-to-apple-notes-1bffde05eee9` |
| neutral | 3 | `https://reddit.com/r/joplinapp/comments/1wuih1h/migrating_from_evernote_is_there_a_betterless`, `https://nesslabs.com/evernote-to-notion`, `perplexity:PERPLEXITY-SYNTHESIS` |
Open the ids and judge for yourself. `by_platform` returns the same breakdown for reddit, tavily, youtube, linkedin, pinterest, perplexity, github, tiktok and hackernews. If you are comparing this with [sentiment analysis tools](/blog/sentiment-analysis-tools), the difference is the unit: here each count comes with the list of posts behind it, which makes it a brand sentiment analysis you can audit.
`/v1/search/forums` is different. It cost 10 credits as captured.
```bash
curl "https://www.socialcrawl.dev/v1/search/forums?query=switched%20from%20Evernote" \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache"
```
`data.computed` carries `stance_split` shares (positive 0.2, negative 0.8, neutral 0), `stance_coverage` (threads 40, counted 5, no_opinion 30, uncertain 5, unjudged 0) and `top_communities`: Hacker News 19, Naver 카페 9, Naver 지식iN 5, r/PKMS 3 and four more subreddits with 1 each. There is no ids object on forums. The stance sits on each thread, in `items[].computed.stance` as a `label` and a `confidence`. Group the 40 threads by label and you get 4 negative, 1 positive, 30 no_opinion and 5 uncertain, which matches the coverage block. The 4 negative threads:
| Thread | Confidence |
|---|---|
| `https://www.reddit.com/r/PKMS/comments/1wsmohv/after_12_years_canceled_evernote/` | 0.91 |
| `https://www.reddit.com/r/ProductDesk/comments/1wbojnw/be_honest_is_evernote_still_your_primary/` | 0.84 |
| `https://www.reddit.com/r/NoteTaking/comments/1ulbfu2/at_what_point_did_you_realize_evernote_was_not/` | 0.89 |
| `https://www.reddit.com/r/Evernote/comments/1nuh89z/long_time_evernote_user_switching_to_another_app/` | 0.86 |
Four caveats before you quote any of this. Four of 5 counted is a small base, and 30 of 40 threads were no_opinion. The forum sample is not Reddit-weighted: Hacker News gave 19 threads and Naver rows gave 14 of the 40. Naver rows that are not about Evernote, such as a 지식iN question about banks, are marked `on_topic: false` in each thread's `items[].computed.relevance` block. And the one positive thread is a Hacker News thread titled "Alternatives to Notion for those on corporate VPN" at confidence 0.68, which is a loose match to a query about Evernote.
## What can brand switching posts not tell you?
It does not tell you how many people leave. No `switch_from=` response carries a churn rate or a switching share: `share` and `headline` are null, and there is no "X% of Evernote users leave". The 90% interval in the count table describes the rows the search read, and those rows are whatever came back on one day, not a random sample of anyone.
Three different nulls show up, and they mean different things. `headline: null` means there is no headline number, by design. `share: null` means no share is published. `destination: null` means no destination name was chosen from the text.
Customer churn analysis computes a rate from your own CRM: your customers, over time. This reads public posts about someone else's product and gives you receipts. The closest term for what you get is customer defection, one post at a time, and a rate is not part of it. If you need a churn analysis number, it has to come from your own data.
What a receipt does give you is a reason and a destination written without anyone asking, which works like an unprompted win/loss record. Klue recommends [interviewing or surveying customers who switched from competitors](https://klue.com/blog/target-customer-analysis), and a receipt gives you the same kind of evidence without the interview.
Results also move with the live web. Run the same calls on a different day, or on a different brand, and you get different rows.
## Where does this fit next to social listening and competitive intelligence?
Boolean listening matches words that sit near each other. Brandwatch documents `NEAR/x` as defining ["how close the two terms should be and the maximum number of words between them"](https://www.brandwatch.com/blog/how-to-write-a-good-query/). A `switched NEAR/10 Evernote` query matches "switched from Evernote to Apple Notes" and "switched from Apple Notes to Evernote" the same way, because it has no idea who left whom.
Four cases keyword queries cannot separate. Wrong direction is the one above. Wrong brand is a post that names your competitor while describing a switch away from something else. Considering is not switching: Cotera notes that people on Reddit who ask for alternatives are ["thinking about switching"](https://cotera.co/articles/how-to-find-competitor-customers), which is intent, with no departure yet. Jokes are the fourth, and Maynard and Greenwood open their [sarcasm paper](https://aclanthology.org/L14-1527/) by calling sarcasm "inherently difficult to analyse, not just automatically but often for humans too". `switch_receipts` keeps jokes, switches away from a different brand and low-confidence rows out.
For competitive intelligence, the receipt's `reason` matters more than any total. Quid concedes that ["The data doesn't point to one universal reason why customers publicly leave a brand"](https://www.quid.com/knowledge-hub/resource-library/blog/why-consumers-break-up-with-brands-what-social-listening-reveals-about-loyalty-in-2026). In the Evernote pull, price and product quality both showed up as reasons, so read the quotes one at a time.
If you used GummySearch to dig through Reddit for this, note that it [closed on 30 November 2025](https://gummysearch.com/closing-time/).
For the surrounding picture, start with [social listening tools](/blog/best-social-listening-tools) for the keyword-alert side and the [B2B competitive intelligence guide](/blog/competitor-intelligence-2026-b2b-guide) for the buyer side. To wire this into your own pipeline, see [how to build your own competitor analysis](/blog/competitor-analysis-tool).
## How do you start using this?
Get an API key, then send the first call with a different brand.
```bash
curl "https://www.socialcrawl.dev/v1/search/everywhere?query=switched%20from%20YOUR_BRAND&switch_from=YOUR_BRAND" \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache"
```
Keep switching language in the query, because the query decides which rows come back and `switch_from=` only judges them. Add `Cache-Control: no-cache` to skip the cache. Expect different rows from ours, since the live web moves. Send the four requests in this post with your own key and swap Evernote for any brand. Everything is in the [docs](/docs), and you can see your data before writing a single line.
## Frequently asked questions
### How do you find customers who are switching from a competitor?
Send a switching-language query such as "switched from Evernote" to `/v1/search/everywhere` with `switch_from=Evernote`. The response adds `data.switch_receipts`, a list of linked public posts with a verbatim quote, a reason and sometimes a destination. Read the receipts yourself, since the check can be generous.
### Where do people post that they left a brand?
In the Evernote pull, the receipts came from Reddit comments, X, Medium and a personal blog. The forums call also returned Hacker News and Naver threads. That is only what one query returned on one day.
### Can I get a churn rate for a competitor from social posts?
No. There is no churn rate or switching share. `headline` and `share` are null on every `switch_from=` call, and the rows read are not a random sample of anyone.
### What is the difference between brand switching and customer churn?
Churn is your own customers leaving, measured over time from your own data. Brand switching here is individual public posts where someone says they left a competitor, with no rate attached.
### How do I search Reddit comments for people who switched from a product?
Call `/v1/reddit/search/comments` with a query like "switched from Evernote" and `switch_from=Evernote`. In our pull it returned 21 rows read, 11 receipts and 7 undecided, at 1 credit.
### What does stance_split count?
It counts positive, negative, neutral, no_opinion, uncertain and unjudged posts for your query. On `/v1/search/everywhere` the ids behind each count come back with it. On `/v1/search/forums`, `computed.stance_split` carries only the shares, the counts sit in `computed.stance_coverage`, and the stance is per thread, in `items[].computed.stance`.
### Does switch_from= cost extra credits?
No. On `/v1/search/everywhere` the call cost 20 credits as captured, and `switch_from=` adds no charge to it. On Reddit comment search and X tweet search it cost 1 credit each as captured, with no extra for `switch_from=`. The forums call cost 10 credits as captured. Check `x-credits-used` on your own responses.