How do portfolio tracking apps handle asset search and selection?

Hi everyone,

I’m building a portfolio tracking application and I’m currently working on the flow for manually adding assets (e.g., stocks, ETFs, cryptocurrencies, etc.).

At the moment, when a user wants to add a stock, they click “Add Asset” and I make an API call that returns the first 50 biggest assets as per their marketcap. These are displayed in a popup window, and the user then selects the desired asset before being taken to a second screen where they enter additional details (quantity, purchase price, date, etc.).

While this works, the experience feels a bit clunky and disconnected.

What I’d like to achieve is a more seamless experience similar to many modern finance apps, where the user starts typing a stock symbol or company name (e.g., AAPL or Apple), and the field dynamically displays relevant matches in a dropdown/autocomplete list directly below the input. The user can then select the correct asset and continue filling out the form without navigating through multiple popups (see picture below from an existing app).

  • How do you typically handle large asset universes (thousands of stocks, ETFs, funds, etc.)?

  • Do you query the API on every keystroke, or use a different strategy?

  • Are there any UX pitfalls or best practices I should be aware of when designing this asset search experience?

In the picture below, the list is refined after each keystroke without pressing Enter. That would be awesome to have the same system but I don’t know what’s the best approach.

Never worked on a cryptocurrency platform before but I think the tech should work the same way as any API-heavy service.

If you can find the ‘Get All Assets’ (paraphrased/assumed) API endpoint docs we can set this up pretty easily.

-First, you might want to add a repeating group below the input element that performs the search.
-Set the type of content of the repeating group assets to the Get All Assets Call that you should have at this point initialized. It should be under API types.
-Set the data source of this repeating group by selecting the option ‘get data from external api’ and select the Get All Assets Call that you’ve initialized.
-Then add a filter.
-The exact specification of the filter will depend on the parameters that are searchable from your Get All Assets Call. A hypothetical parameter might be ‘asset_name’/‘name’/‘title’. Your constraint on the data source filter would then be something like asset_name contains keywords {input typed asset_name’s value}
-Be sure to check the option ‘Ignore empty constraints’ at the bottom of your filter configuration expanded view. So that no Get Call gets performed when the input element acting as a searchbox is empty.
-And of course, it goes without saying that the repeating group should not be visible when there is no performed search.

As an example:

Hope this helps.