How do I switch from calendar-based to activity-based working?
Recommendation
Don't switch on the same product. The switch itself (creating activities) is not technically complex, but doing it on a product that is already in production makes a mess: old loose bookings and new activity-based bookings get mixed up, and rates/reporting can no longer be traced reliably.
Instead, create a new, clean product that works with activities, and don't create any activities on it yourself yet. Then use the "Move bookings to another product" action to move the existing bookings over: it automatically creates the matching activity while moving, or links to an existing one.
Step-by-step plan
- Create a new product set up for activity-based working. Don't create any activities yourself yet — they are created automatically during the move, based on the existing booking data (date and time).
- Go to the dashboard of the current (calendar-based) product and click "Move bookings to another product" in the action block. This requires the right action_object_movebookings.
- Choose the new product as the destination.
- Filter on the desired period (for example, only future bookings) and use the checkboxes to select the bookings to move.
- Review the summary: whether the destination product has a counterpart for everything, whether any bookings have a linked invoice or payment, and that prices are recalculated using the destination product's rates.
- Under "Convert to activity", leave both toggles on: "Link to the matching activity" and "Create a new activity if it doesn't exist yet".
- Click "Confirm and move". You'll get a result showing moved and conflicting bookings.
- Resolve conflicting bookings individually: adjust the activity's capacity, or move the booking in a later round.
- Repeat the steps for the remaining bookings until everything has been moved.
- Deactivate the old product once everything has been moved, so no new bookings can come in on it.
Note: moving is capped per action
The actual move happens in a single action up to a maximum number of bookings (250 by default). With more matches, you'll see a warning that only the first batch is moved; repeat the action for the rest. Optionally use the option to select all bookings matching the filter, instead of checking them page by page.
See also: How do I move bookings to another object? for the general workings of this action (without activity conversion).





