No nodes after importing a subscription: eight checks
The node list came up empty, or holds a few odd entries. Eight causes ordered by how often they occur, each with the command to run and what the result means.
The most common beginner problem. Work through these in order — do not skip — because 90% of cases resolve in the first three.
1. Is the profile actually selected?
The single most common cause, more than half of what I see.
In most clients, importing and enabling are separate actions:
- Clash Verge Rev — click the profile card so it highlights
- sing-box — tap the profile in the list so it becomes active
- Shadowrocket — select a node in the list
An "import succeeded" message does not mean that configuration is in use.
Check: go back to the profiles list and confirm yours is marked as current.
2. Read the status code in the log
Skipped by almost everyone, and the answer is usually here.
Clash Verge Rev: sidebar → Logs. v2rayN: View → View service log. Mobile: usually under settings.
Find the subscription fetch:
| Code | Meaning | Action |
|---|---|---|
200 | Fine | Problem is elsewhere; keep reading |
404 | Link is dead | Get a new source |
403 | Rejected | Probably a User-Agent requirement — see step 5 |
502 / 503 | Server fault | Wait, or the provider is gone |
| Timeout | Unreachable | See step 4 |
3. Verify the subscription by hand
Take the client out of the equation:
curl -A "clash" -sI "your-subscription-link" | head -1
HTTP/2 200 ← fine
HTTP/2 404 ← gone
Then look at the content:
curl -A "clash" -s "your-subscription-link" | head -50
Clash format shows a proxies: block with entries under it.
PowerShell:
curl.exe -A "clash" -s "your-subscription-link" | Select-Object -First 30
4. The chicken-and-egg problem
Symptom: refresh spins, then times out.
Cause: the subscription server is outside the network you are trying to leave. Fetching it needs an exit; you are looking for a subscription because you have no exit.
Workaround one: mobile data
Tether your phone and refresh. Conditions on mobile networks are sometimes different.
Once fetched, the nodes stay; switching back to Wi-Fi is fine.
Workaround two: connect with a single node first
If you have one working ss:// or trojan:// link, import that alone, connect, then update the subscription through it.
v2rayN has an explicit "Update subscriptions via proxy" for exactly this.
Workaround three: an accelerated subscription domain
Some providers publish a CDN-backed subscription URL reachable without a proxy. Look in your account dashboard for a "backup" or "accelerated" subscription address.
5. The User-Agent quirk
Symptom: the browser shows gibberish for the subscription URL, and the client cannot fetch it either.
Cause: many subscription servers return different formats based on User-Agent:
| Agent | Returns |
|---|---|
clash / mihomo | Clash YAML |
v2rayN / v2rayNG | Base64 node list |
sing-box | sing-box JSON |
| A browser | Whatever the default is |
So a browser showing gibberish proves nothing.
Test properly:
curl -A "clash" -s "link" | head -5
curl -A "v2rayN" -s "link" | head -5
Whichever returns sensible content tells you which family of client to use.
6. Format mismatch
Symptom: "failed to parse configuration" or "format error".
| You have | Client expects | Result |
|---|---|---|
| Clash YAML | Clash-family | ✅ |
| Clash YAML | sing-box | ❌ |
| Base64 node list | v2rayN | ✅ |
| Base64 node list | Clash-family | ❌ usually |
Fixes:
- Use the matching subscription URL. Providers normally publish several: ``
text https://xxx.com/sub?target=clash https://xxx.com/sub?target=singbox https://xxx.com/sub?target=v2ray`` - Run it through a subscription converter.
- Change client.
7. Status entries, not nodes
Symptom: a handful of entries named Remaining data: 0.00GB, Expires 2026-08-01, Resets in 3 days.
Those are not nodes. Some providers display account status this way. They will never connect, and that is expected.
If they are all you have, then:
- Your allowance is spent
- The plan expired
- The account is suspended
Check your dashboard.
8. Nodes present, everything timing out
Different problem — the nodes are there and dead.
For a free subscription this is routine. Median lifespan across the nodes I tracked was six days.
Do this:
- Refresh once — the provider may have already replaced them
- Still all dead → change source: Public subscription links that still update
Checklist
- [ ] Is the profile selected and highlighted?
- [ ] Does the log show a 200 for the fetch?
- [ ] What does
curl -A "clash" -sI "link"return? - [ ] Can you fetch it over mobile data?
- [ ] Does the format match the client?
- [ ] Are those entries real nodes or account status?
- [ ] Does the dashboard show remaining data and an active plan?
- [ ] Test latency — everything down, or only some?
Eight checks and still nothing means the source itself is gone. Replace it.
If this keeps happening
Honestly: with free subscriptions, it will happen roughly weekly. Six days is the median.
If that rhythm is not something you want in your life, the arithmetic on the alternative is in Do free nodes actually save money?
Read next
- Connected but nothing loads
- Public subscription links that still update
- Clash Verge Rev setup
- Free Clash nodes: get them and import them
Questions people keep asking
It says import succeeded but the list is empty.
Most often the profile imported but was never selected as active — in many clients those are two separate actions. Check whether the profile card is highlighted. If it is and the list is still empty, read the HTTP status code for the fetch in the client log.
The only entries are things like "Remaining data".
Those are not nodes. Some providers use node names to display account status, and they will never connect. If that is all you have, your data allowance is spent or the plan has expired.
Refreshing the subscription spins forever.
The client cannot reach the subscription URL. Almost always this means you currently have no route out at all — a chicken-and-egg problem with three workarounds listed below.
Would a different client fix it?
Sometimes. If the issue is format mismatch — Clash YAML fed to sing-box, or the reverse — then a matching client or a subscription converter fixes it. If the subscription itself is dead, no client will help.