Currently they are stored in a map with a string as a key, consequently we have to store the actionId in our runner to find the matching actions in the actionsForMatch method and in some cases to check which action was selected in the run method.
My suggestion would be to use an int instead, this will also allow us to use enums, which is IMO cleaner than handling strings. Also we could define a base enum in the RunnerManager and define values for internal actions. One of those could be the functionality to put the data as a string in the UI, which is currently only possibel with the InformationalMatch. Also functionality like copying text to the clipboard could be handled this way(this is often copy pasted).
Also we could add an actions property to the query match, this way we can set the actions when creating the query match itself, which will also make the D-Bus runners a simpler and cleaner. We could even add this in KF5 and just use the new actions property as a fallback if the actionsForMatch method is not implemented.