There are many add-ons and SuiteApps you can purchase to help you manage subscriptions or automate recurring Invoices. These apps provide a lot of great functionality and a nice user experience, however, if your organization does not have the ability to invest in additional modules or 3rd party apps, then you can build your own subscriptions module using workflows! The trick is to setup some new fields on your Quotes or Sales Orders to manage the frequency of your recurring invoices. Furthermore, if you would like a Custom Transaction Type could also serve as the record to hold your main subscription information.

If you are familiar with custom records and custom transaction types then you may prefer to create a custom transaction type to manage your subscriptions. If you use Estimates and Sales Orders regularly for other types of orders, then a custom transaction type can help to segment your subscriptions or recurring invoices into a different bucket so as not to confuse your users. This will also give you more control over reporting as you can default your custom transaction type to accrue in a different account. Make sure to set your custom transaction type to "non posting" so you do not effect your GL until the Invoice is created. Also, use the type of "Sales Transaction" so you can transform it into an Invoice using a workflow.
- To start we will create a few new Transaction Body fields to help us manage our recurring invoices. These should be added to the Estimate or Sales Order, whichever you would like to use to manage your recurring invoices. (Or you could use a custom Transaction Type if that fits your use case better.)
- Recurring Invoice Frequency - this will be how often (in days) an invoice gets created
- Next Invoice Date - this will be used to trigger the workflow to create a new invoice.
- Recurring Invoice End Date - if recurring invoices should stop at a certain point you can use this field to define an end date.

- The next step is to setup a Saved Search that will trigger your Invoice creation. Setup a transaction saved search based of the transaction type of your choice and include the new Next Invoice Date field you created as part of your criteria.

- Now let's setup a workflow that will create Invoices. For this we will use the Transform Record action. To start just create a workflow with the type Transaction and sub type that matches the transaction type you are working with.
Remember that you can only transform an Estimate or Sales Order into an Invoice. (Also if you setup a custom transaction type using the "Sales Transaction" type it can be used to transform into an Invoice)

- Then set your workflow up as a Scheduled workflow that runs everyday, because we will use the custom field Next Invoice Date to control when recurring invoices are made so we want to check every day if any need to be made.

- Create a Workflow State field that will first store the current Next Invoice Date so we can recalculate it later.

- The first thing to do is to copy the Next Invoice Date in the Current Next Invoice date workflow field we made in the step above.

- Now we can add our Transform Record action into State 1 of the workflow. The transform record action will essentially just take the Estimate and almost Make Copy of it, except the "copy" is an Invoice instead of another Estimate. You can set new values for header fields on the invoice that gets created but unfortunately you cannot change any of the line items so be sure that the Estimate you setup has the correct Line information on it.

- Add another action to the workflow to set the NEW Next Invoice Date by adding the Frequency to the workflow field that we created.

- Now let's setup an Estimate for our first recurring invoices. The Estimate will always remain in the system and be there to generate Invoices each month.
