Step 1: Find the import preset for your broker
The full preset list lives on the app's import screen, and you can open it right now without an account. Our public Demo project carries the same built-in presets your own project gets, and opening one shows the step-by-step export instructions for that broker — so you can check whether yours is covered, and what its export takes, before signing up.
Those instructions ship with the preset rather than living on this site, which is what keeps them accurate: when a broker changes its export and we update the preset, its instructions change with it.
That link opens our public Demo project
The Demo project is for reading the presets and their export instructions. Switch back to your own project before you import, or the transactions will land in the Demo instead of your portfolio.
If your specific broker isn't listed, don't worry. You can easily create a custom template yourself – or you can send us a sample CSV/XLS/JSON/XML file at support@mycapitally.com. Include as many transaction types as possible, randomize your actual number, and provide us with a brief description of how to export the data from your broker.
Step 2: Export Transactions From Your Broker
Export the transaction history — every trade, dividend and fee with its own date — following the export instructions the preset shows when you open it. Do not export a positions or holdings snapshot: a snapshot only says what you hold today, with no trade dates and no cost basis, so importing it prices every position at today's market and your returns start from zero.
After exporting, drop the file on any page in your project or open it from the import screen. When exactly one broker template recognizes every required section by its header, that template opens without a picker; otherwise Capitally asks you to choose, with Import any data as the fallback.
If your broker splits the history across several files, import the oldest one first and don't merge them — overlapping ranges are deduplicated automatically. Interactive Brokers is the one you have to build first: it has no ready-made export, so you create an Activity Flex Query with the right sections ticked, and a single run returns at most one year. Its preset walks through that on the import screen — you can read it there, or in the demo project without an account. When the result comes back empty or partial, Interactive Brokers covers the traps that cause it.
Your data does not leave your device
It's worth noting, that whatever file you drop on Capitally it will always be handled locally. It doesn't have to be sent to our servers or elsewhere. Plus the transactions that you decide to import out of it will be encrypted.
When the broker's history doesn't go back far enough
Import what the broker does give you, then set the earlier state with an Account Balance transaction per security, carrying the quantity you held at the start of that range. Ask the broker first whether older data can be pulled through another channel — several send it on request.
You can also import those opening positions from a file: use Import any data and pick the Account balances starting point. Cost basis doesn't come through that route, so add it separately if you want historical returns rather than just correct position sizes.
Step 3: Match Your Assets
Once you've imported the file, Capitally will start matching the data to the existing assets in your project or find them on the market. Whenever an asset is encountered for the first time, we'll ask you to confirm if the proposed assets are correct. You can manually select from other matches or search for another symbol if needed. Creating a custom asset is also an option.

Importing multiple accounts from the same broker
Open the target account in Portfolio and choose Import here, or drop the file while viewing that account. Capitally targets the import at the opened account and reuses the template last used there; if the account has no import history, it opens the template picker.
Some brokers put an account identifier in the export, and those accounts are created automatically as the file imports. A file that references more than one account is never retargeted. Brokers that do not report an account identifier — including Saxo and Robinhood, and XTB's IKE versus regular accounts — need one import per account from that account's Portfolio view.
Two accounts at one broker can produce false duplicates
When fees or transfers in two accounts share the same date, asset and value, deduplication can flag the second one as already imported, leaving that account's balance short by exactly that amount. Turn deduplication off in the import options for that run, or give each account its own cash asset. Duplicates and re-importing covers what gets compared.
If you regularly import from the same broker into different accounts, create a preset variant for each one. While importing, open the bottom-right menu and choose Save & rename preset to save your current settings — account, field mappings, currency — as a new variant. Next time, just pick the right variant from the preset list and everything is pre-configured.
All variants share the same underlying preset, so when it gets updated — for example when we add support for new transaction types — every variant picks up the change automatically.
Step 4: Review Imported Data
Take some time to review the data in the table.
If you don't want to import a certain transaction - just change its Status. Some of the transactions can be already ignored - either because they're not supported, or they're already imported - you can check the reason by hovering on the info icon next to status.
You can update the status of multiple rows at once by selecting them and changing the value on any of the rows.
Additionally, the rows can be sorted by clicking on the column headers for easier review.
What "not supported" means on a row
It means we haven't seen that transaction type in a sample of this broker's format before, so the preset has no rule for it. It is not a statement about your portfolio — the rest of the file imports normally, and the skipped rows exist only inside that import session, so nothing is blacklisted. Send us the export and say which rows are missing, and we'll extend the preset; re-importing the same file afterwards brings in only what's new.
Duplicates and updates
A row marked Duplicate is already in your project and gets skipped, which is what makes re-importing the same file, or an overlapping date range, safe. Switch a row to Update to overwrite the stored values instead — that's how you pull in a dividend tax or fee your broker restated after the fact. See Duplicates and re-importing for what gets compared and how to change many rows at once.
Step 5: Final Validation
At the last step, we'll show you the final balances of all the positions you're importing so you can verify that everything is correct. After you confirm the import, you can always undo it if you notice any issues later - either from the toast message that appears or by using the Undo option in the top-right menu.
Troubleshooting Import Errors
If you encounter issues while importing, here are solutions to the most common problems.
If the failure is specific to one broker's export rather than to the import itself, Troubleshooting imports is the page for it.
File Format Issues
Browser compatibility
Import is most reliable in a Chromium-based browser — Chrome, Edge, Opera or Arc. Firefox produces three failures that look like problems with the file but aren't:
- Garbled characters in files with Polish (ą, ę, ś — "Giełda", "Wartość") or German (ü, ö) text. Open the file in Excel or Google Sheets and re-export it as CSV with UTF-8 encoding, or import it in Chrome.
- A file-format error rather than garbled text. On Windows 11 the parsing library can read a CSV as SYLK. No encoding change fixes this one — use Chrome or Edge.
- Import doesn't start at all. Usually a Firefox extension: import works on a clean profile.
Changing a file's encoding to chase the first symptom can produce "unrecognized columns" errors instead — common with Bossa exports, and the same untouched file opens cleanly in Chrome or Edge.
Copy-paste import can also behave differently between browsers when the source table has multi-line cells, so a browser switch is worth trying there too.
My broker changed their export format
Brokers occasionally update their export formats, which can break existing import presets.
If a built-in preset stopped working:
- Try the import anyway - we may have already updated the preset
- If it fails, email support@mycapitally.com with your broker name, a sample file, and the error message
We typically add support for format changes within a few days.
As a temporary workaround, click "Import any data" instead and map columns manually.
Asset Matching Problems
You match an asset once. Whatever you pick during import is saved permanently and reused by every later import from that source, and on subsequent imports any newly seen symbols are sorted to the top of the review list. Matching needs your help in the first place because many brokers — most Polish ones, plus XTB and Finax — export no ISIN, leaving a ticker that can be ambiguous, internal to the broker, or specific to one exchange.
"No asset found" for a symbol I know exists
The symbol in your file might not match our database exactly. Try these approaches by clicking on the dropdown where the error is shown:
- Search by ISIN number instead of ticker symbol - this is the most reliable method
- Add the exchange suffix (e.g.,
AAPL.USinstead of justAAPL, orCDR.GPWfor Warsaw) - Search by the company name
- If the asset truly isn't in our database, create a custom asset
Two things about the search box: typing in ALL CAPITALS looks for that exact symbol, while mixed case runs a broader name search. And Yahoo Finance symbols are proprietary, so they often don't match ours — use the ISIN.
An unusual-looking ticker is often exchange-specific. GPW GlobalConnect ETFs, for instance, are prefixed with ETF: ETFEUNM is the listing we carry as EUNM under ISIN IE00B4L5YC18, so search the base symbol or the ISIN. Renamed or merged companies sit under their new identifier — UniCredit moved from IT0004781412 to IT0005239360.
Wrong exchange was matched
When several listings share a ticker, the matcher takes the one with the longest price history. That is how a EUR-denominated ETF ends up on a GBP London line, or a US stock on an Irish or Swiss one. Fix it during import by clicking the asset field and searching with an exchange suffix (e.g. VOW3.XETRA for Volkswagen in Frankfurt), or by ISIN to see every listing at once.
To change it after the import, edit the asset and open its Prices tab — the "Source prices using this market symbol" dropdown already lists the alternative markets, so you rarely need to search. Changing the symbol does not change the asset's currency: use the "Use this currency, market & symbol" link under the dropdown to apply all three together.
Worth a second look when the match is a different company with a similar name rather than a different exchange — that one shows up weeks later as an implausible return on one position. Check the asset's full name in the review step before confirming.
If you deliberately want the same ISIN tracked as two assets, one per exchange, create a custom asset with its own name, type, ISIN and chosen exchange, then switch the preset's matching column from ISIN to Symbol so the rows stop collapsing into one. A preset can also pin the market itself — inside Add asset, a Set statement on the Market property — and built-in presets can be edited the same way.
Asset not in database at all
Use the row's Create button, or choose Create custom asset from the asset dropdown. The Add asset form is pre-filled from the file with the name, symbol, ISIN and type; review the details, then create it. When several assets or accounts are confirmed missing, Create N missing objects in the warning creates them as one batch, and a successful batch can be reversed with Undo from the toast. A lookup error is excluded from the batch but still offers the row's Create button. Your transaction's own price is used as the cost basis, and you can add prices later. This is the right route for private equity, delisted stocks and certificates, and anything without a public quote.
If the asset is publicly traded, ask us to add it instead: email support@mycapitally.com with the ISIN — a ticker frequently maps to the wrong security. Our data provider usually answers within 24 hours and the asset shows up in the app around noon UTC the next day. Send several ISINs in one message if you have them; most European funds are added on request. Once it's live, switch the custom asset to automatic pricing from its Prices tab.
NewConnect securities and ADRs are covered — send the ISIN if one is missing. For IBKR files, copy the ISIN that failed, open the "Input: Main" tab and paste it into the "Search table" field to find the row it came from. An exchange code we don't map appears as a 'market not found' error; search for the market manually inside the import flow.
Common Error Messages
"No account found with name X"
The preset is looking for an account that does not exist in your project. The row's Create button opens the Add account form pre-filled with the name from the file.
From the account dropdown you can also:
- Select an existing account from your project
- Choose Create new account to add it, pre-filled with the name from the file
"Market prices can be set only for assets already in the project"
You're trying to import balance data that includes a price column, but the asset doesn't exist yet.
Solution:
- Go back to column mapping
- Remove the market price mapping (click the trash icon)
- Or import transactions first, then import prices separately
Still Having Issues?
If none of these solutions work:
- Try the
Import any dataoption and create a custom mapping - Send your file to support@mycapitally.com and we'll fix our preset to handle it properly. Include the broker or format you're importing, the error you see, and the exact steps you took to produce the export — brokers document their formats poorly, so the export path tells us as much as the file does