Choose the right subscription format before importing
On your provider’s website, copy a subscription URL labeled “Clash,” “Clash Meta,” or “mihomo,” then import it from the client’s “Profiles” page. Downloading a profile, enabling it, and routing traffic through it are three separate steps. Seeing a profile card in the list only confirms that the client saved the profile—it doesn’t mean your browser is using the proxy.
A subscription URL is usually an HTTPS link that returns configuration data—not your provider’s login page or a webpage containing a QR code. It may include access credentials. Use the page’s “Copy subscription URL” button rather than copying the account page’s address from your browser’s address bar.
Check these three things before importing
- Client core: Clients using mihomo support more protocols and configuration fields; older Clash cores may not recognize newer protocols. A successful import doesn’t mean the core can parse every subscription.
- Account status: Check whether your account has expired, your data allowance is used up, or the subscription URL has been reset. Confirm this in your provider’s account portal before changing local ports.
- URL integrity: Keep the original
https://, path, and query parameters intact. Don’t remove characters that look unnecessary or paste along any line breaks or quotation marks.
Import a subscription URL: from setup to activation
Button locations vary by client. Desktop apps usually offer “Profiles” → “New” or “Import”; Clash for Android often uses “Profiles” → “+” → “Import from URL.” The steps below describe what to do, rather than treating one client’s menu labels as universal.
- Copy the dedicated URL. On your provider’s website, choose the Clash or mihomo format that matches your client core. If both “Universal subscription” and “Clash subscription” are available, choose the latter.
- Add a remote profile. Open the client’s “Profiles” page and choose the URL import option. If there’s a “Local/Remote” selector, choose “Remote”; “Local” is generally for files stored on your device.
- Enter a name and URL. Name it something like “Daily subscription,” and paste the complete subscription URL into the address field. Set the update interval using the units shown in the interface—don’t enter hours into a field measured in minutes.
- Save and wait for the download. Select “Save,” “Import,” or “Download.” Check for an error message, an updated timestamp, and a new profile entry. If it fails, note the exact error before retrying so the original message isn’t lost.
- Enable the profile. Select the profile you just imported. Confirm that its selected indicator changes and that no configuration parsing errors appear. Some clients apply it automatically; others require you to select “Enable.”
- Choose an outbound proxy. Open the “Proxies” page and select a node in any policy group that requires manual selection, or choose the subscription’s automatic selection group. Don’t exit just because you can see the node list.
- Route the traffic that needs a proxy. On desktop, start by enabling “System Proxy” to test your browser. On Android, you usually need to start the connection and approve the system VPN prompt. TUN mode isn’t required to import a subscription.
If the provider only offers a QR code, first check whether it contains a subscription URL or a single-node URI. An ss:// QR code usually describes one node; it doesn’t automatically include rules, policy groups, or a remote update URL. Successfully scanning it doesn’t mean you’ve imported a complete subscription.
YAML vs. Base64: configuration structure vs. encoding
YAML is a configuration format; Base64 is an encoding method. They’re not the same kind of thing. A “Base64 subscription” often means multiple node URIs joined together and then encoded, but it could also be some other text encoded as Base64. Check the decoded content instead of judging by the downloaded file’s name.
| Returned content | Typical characteristics | Import notes |
|---|---|---|
| Complete Clash YAML config | May include proxies, proxy-groups, and rules |
Suitable for import from the Profiles page, but check protocol and core compatibility. |
| Base64 node subscription | The raw response is a long encoded string; decoding it often reveals multiple lines of node URIs | Use it directly only if the client explicitly supports conversion; decoding alone won’t create rules. |
| Plain-text list of node URIs | Lines may start with ss://, vmess://, and similar schemes |
This is node data, not a complete Clash config. The client must support importing or converting it. |
| Proxy list in YAML | Usually contains only a list of nodes under proxies |
Can be used with proxy-providers; don’t assume it’s a complete config with policy groups and rules. |
What a complete config looks like
The example below shows YAML structure and key names only. It has no remote nodes, and its policy group can select only direct connections, so it can’t be used to test proxy connectivity. Real subscriptions can also load nodes through proxy-providers, so a missing inline proxies section doesn’t necessarily mean the config is broken.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups:
- name: Outbound selector
type: select
proxies:
- DIRECT
rules:
- MATCH,Outbound selector
mixed-port: 7890 means a single local port accepts both HTTP and SOCKS proxy connections; it isn’t a provider node’s port. The final entry in rules sends requests to “Outbound selector,” whose only option is DIRECT, so traffic ultimately goes direct. YAML indentation uses spaces, not tabs. An indentation error can prevent the file from parsing before it even attempts a network connection.
Why a Base64 subscription may still not work after decoding
Decoding restores the text; it doesn’t add proxy-groups, DNS settings, or routing rules. Even if decoding produces valid node URIs, the client core must support their protocols. The simplest fix is to return to your provider’s website and get the subscription specifically for your client. If you need to convert it, use a built-in client feature or a trusted local tool, then check the resulting policy groups and rules.
Import failed? Troubleshoot downloads, parsing, and connections
First, identify where the error occurs. If the config hasn’t downloaded, changing rules won’t help. If it parsed successfully but websites won’t load, repeatedly copying the same subscription URL is unlikely to fix it.
Layer 1: The subscription request didn’t return the right content
401 Unauthorized: Authentication may be required, or the token may be invalid. Copy the complete URL generated in your account portal again, and check whether the subscription was reset.403 Forbidden: An access policy, account restriction, or blocked request may be responsible. Check your provider’s guidance; changing the local listening port won’t fix this.404 Not Found: Check whether the URL was truncated, its path is no longer valid, or you copied a webpage link instead.no such host: The subscription domain couldn’t be resolved. Check the spelling, then check DNS on your current network. This isn’t a node connection failure.i/o timeout: Check which destination timed out in the logs. If it’s the subscription server, troubleshoot the download path first—not a node that hasn’t been downloaded yet.
If the URL opens in a browser but not in the client, that doesn’t necessarily mean the URL is fine. The browser may use a login cookie, a different proxy, or different request headers. Some services return different formats depending on the request, so use the dedicated Clash link they provide. If you inspect the response, do so locally and never share the full config.
Layer 2: The content downloaded but couldn’t be parsed
If the response starts with <!DOCTYPE html> or <html>, you received a webpage—possibly a login or verification page—not YAML. For errors like yaml: line, check indentation, colons, and quotation marks at the reported line, and make sure the response doesn’t contain webpage text. If the logs report an unsupported proxy type, check what your core supports and switch to a compatible format or core. Randomly deleting fields won’t fix the underlying issue.
Layer 3: The profile is enabled, but traffic isn’t getting through
On the “Proxies” page, first make sure the current group isn’t set to DIRECT or REJECT. Then check the actual matched rule and outbound route under “Connections” or “Logs.” System Proxy only affects apps that follow the system proxy settings; games, command-line tools, and apps with their own network stack may need separate proxy settings or TUN mode, once you understand its routing effects. Importing successfully doesn’t mean every app is routed through the proxy.
After updating a subscription, verify that it took effect—not just that the refresh succeeded
Remote profiles generally retain their subscription source, making manual or scheduled updates possible. A locally imported file is usually just a snapshot. To verify an update, select “Update” on the active profile card, confirm its timestamp changes, and check the node list. If a different, older profile is still active, a successful download won’t change the outbound route in use.
- Check the active profile: Look for the selected indicator, not just the profile’s position in the list.
- Check what changed: Look for nodes or policy groups the provider actually added or removed. No visible changes may simply mean the provider returned the same content.
- Check the app logs: Look for parsing or reload errors after the update. Some clients continue using the last working config.
- Test a new connection: Reload a page or make a new request. Existing long-lived connections may keep using the previous route, so they’re not a reliable way to check whether the switch worked.
FAQ: importing files, ports, and duplicate subscriptions
Can a downloaded .yaml file replace a subscription URL?
You can import it as a local config, but it usually won’t retain the original subscription URL or update automatically. This is useful for a quick check or offline transfer; to keep receiving provider updates, import the remote URL. A file extension doesn’t guarantee valid content: a file named config.yaml could contain an error page.
Do I have to change the port to 7890 after importing?
No. 7890 is just a common example; use the listening port currently shown in your client. If an app is set to 127.0.0.1:7890 while the client is listening on 7897, the ports won’t match. For address already in use, check whether two proxy clients are running at the same time. Don’t change ports blindly just to match a tutorial. See the local port settings guide for details.
Will importing the same URL more than once make my connection faster?
No. Importing the same URL repeatedly usually just adds more profiles; the active profile determines which one is in use. Keep one remote profile that you can update, along with any necessary backups. If a subscription contains multiple nodes, choose one in a policy group or use an automatic selection group instead of importing the same subscription again.
To wrap up, check these in order: the dedicated subscription format is correct, the download returned valid content, the config parsed and was enabled, the policy group has the right outbound, and the target app’s traffic is routed through it. If you later run into timeouts, continue with the timeout troubleshooting guide. For first-time setup, follow the subscription import guide step by step.