ox.el
shows two variables that may be interesting to you:
(defvar org-export-filter-parse-tree-functions nil
"List of functions applied to the parsed tree.
Each filter is called with three arguments: the parse tree, as
returned by `org-element-parse-buffer', the back-end, as
a symbol, and the communication channel, as a plist. It must
return the modified parse tree to transcode.")
(defvar org-export-filter-final-output-functions nil
"List of functions applied to the transcoded string.
Each filter is called with three arguments: the full transcoded
string, the back-end, as a symbol, and the communication channel,
as a plist. It must return a string that will be used as the
final export output.")
org-export-filter-parse-tree-functions
will operate on the org tree itself (and no worries, all of this is done on a copy of the data, not the original file itself), which gives you the power to work with org, but may also be quite slow.
org-export-filter-final-output-functions
is called as the last step of org-export-as
, so you may be able to run something simple like
(defun my-replace (calendar, backend, channel)
(replace-regexp-in-string "^SUMMARY:.*$" "SUMMARY:Busy" calendar))
(push 'my-replace org-export-filter-parse-tree-functions)
Mind you, you probably only want this to run when it's the ics export :)