I have a workflow performing well to accomplish this.
First make a list for each rep:
At least one associated activity has
Activity created by
is any of {NAME OF REP}
AND
Form submission
has filled out any form submission on Any page
Then a workflow using that list in the trigger (along with anything else you may want to filter out… I included some lifecycle stages for both contact and company to filter this down to non customers.
Action: Set a contact property Contact owner to {NAME OF REP}
You’ll need to create a list & a workflow for each rep on your team. The result is any demo that gets booked, the owner of that contact is changed to whoever the call/meeting was booked with. I also have workflows so that if a contact owner gets updated, it updates the company as well. Also working in reverse for deals and companies to update the associated contacts.