• Offload
  • Posts
  • šŸ¤– Automate Your Business Proposals with AI

šŸ¤– Automate Your Business Proposals with AI

Learn to use AI with make.com and Tally to automate document creation from call transcripts

šŸ‘‹šŸ¼ Hey there! Welcome to a free workflow teardown edition of Offload, a newsletter for professionals to learn how to build products and automate work with AI and no-code tools.

In this edition, you'll learn how to automate the creation of templated documents from meeting transcripts using AI, Tally, and Make.

While this example focuses on turning a sales call into a business proposal, the same process applies to things like scopes of work, investment memos, client plans, and internal summaries.

Let’s dive in šŸ‘‡šŸ¼

-Offload This-

From call transcript to business proposal

People spend a lot of time preparing templated documents based on information provided in a meeting. A. LOT.

For example, you do that great sales call, with solid rapport, clear needs … then you have to write the freaking proposal 😢 

Today's teardown will solve this.

You’ll learn how to automate the creation of a business proposal from a sales call transcript using AI → summarizing the conversation, extracting key insights, and preparing templated documents.

But this isn’t just about sales. This same workflow works for tons of other cases:

  • Briefing call → Scope of Work

  • Pitch meeting → Investment Memo

  • Discovery call → Client Plan

  • Sync call → Internal Summary

If your meeting leads to a document, this pattern applies.

Learning to set this up takes maybe a couple of hours. It can free you hundreds of hours every month - and even more mental energy.

Here is what you are building:

Let’s break it down.

1. Setting up an input form

Go to Tally.so and create a free account and create a form

In it, create three questions

  • Client name → short answer type

  • Client company → short answer type

  • Call transcript → long answer type

This is how your users will submit transcriptions to the workflow

Publish the form and go to Make.com.

2. Getting inputs into the workflow

Create a new scenario and add a Tally module as trigger.

  • Select the option to watch new responses webhook

  • Create a connection with Tally and select the form created

Save the scenario

In make.com, at the bottom of the page, toggle the ā€œimmediate as arriveā€ and click ā€œRun onceā€. Now it’s waiting for inputs from Tally.

We are going to test this module and get test data for the next modules

Go back to Tally and submit an answer to the form using the following inputs:

  • Client name: Edward

  • Client company: DeathStar Inc.

  • Call transcript: a dummy transcript (you can use the example below)

Call Transcript Deathstar.pdf2.42 MB • PDF File

After that, you should get something like the image below in make:

It means data is coming from Tally to Make.com, which is what we need for the next steps.

3. Set variables to work on

Add a set variables module.

Add three variables and name whatever you like. Here are some names you can use

  • client_name

  • client_company

  • call_transcript

Now you have to map each variable to an item from a previous module. Since you have tested the Tally module before, you will be able to access them:

Save and right-click the set variables module. Click the option ā€œrun this module onlyā€. A popover will appear with empty variables for you to fill in manually.

Get the data from the output of the Tally module and manually input the data required, and hit ok.

What you just did was to save ā€œworking dataā€ as variables for the next modules.

Let us enter the AI realm of this workflow.

4. Summarize transcription

Add a new module and select OpenAI, then select the option ā€œCreate a Completion (prompt)ā€

A setting popover will appear.

You should already have a connection to use the OpenAI APIs, but if you are new to this, follow the steps in this post I've made recently.

Select the o4-mini as the model, and let’s now set up the prompt.

In the Text Content field you will add the ā€œSummarizer Promptā€ shared in the section ā€œPrompts Usedā€ below.

Under the #Input section of the prompt, you should map the ā€œcall transcriptā€ field from the ā€œset variablesā€ module.

Hit save and test this OpenAI module. It will require the call transcript as input; just copy and paste the dummy call to test the output. You should get something like this:

Copy the Content of the output to test the next step.

4. Format summaries into JSON

Now you are going to format this output into a JSON format.

For this, add a new OpenAI module, and select chat completion again.

Add a message with the role user again, just like the previous one.

For the message, use the prompt Prompt JSON Format (shared below), mapping the output from the previous OpenAI module as input for the one.

Save this module and right click to test it. Paste the output you copied in the last module test into the message input field.

Hit Ok and check if the output from this module follows the JSON structure

{ 
ā€œkey 1ā€: ā€œvalue 1ā€,
ā€œkey 2ā€: ā€œvalue 2ā€,
}

The output is now in a JSON format, so you can ā€œparseā€ it into separate variables.

4. Create separate variables

This is what you're going to do in the same scenario:

  • Add a JSON module called ā€œparse JSONā€

  • In the JSON string, map the output from the last AI module you created, and save.

Grab the output from the previous module and test this one (right click > run this module)

You will see that the module OUTPUT is now a bundle with independent variables.

These are the variables we are going to use to create the document. Now, lets move to the file creation.

5. Create .doc template

The first thing you need to do is create a document template.

In this example, the objective is just to show how to map variables from the make.com workflow into your template. So, we are not making it super detailed.

In Google docs, create a .doc file to work as your template and save it in a drive folder.

In the screenshot below, you can see an example of how to set up the template.

Your template should use as placeholders for the content that is coming from Make.

IMPORTANT: to every key you created as JSON in Make, you should have a corresponding tag as a placeholder in the doc template.

You are almost done.

6. Create Document module

Go back to make.com and create a module from Google Docs, called ā€œcreate a document from a templateā€.

In the configuration popover, you should be able to trace back in the ā€œDocument IDā€ section to the template you just created.

As soon as you do it, you will see that the Values section below will pull all the tags you created in the template.

Fill in the Title and drive location you wish to save new documents. You can make the Title variable if you want.

Hit save, and let's test this baby. Hopefully, you will reach something like the video below.

You’re Done

This workflow takes a manual, repetitive task and turns it into an automated process. It works for proposals, reports, plans … any document that starts with a conversation.

Suggestions to Improve Further:

  • Get the transcript as a file and not text

  • Improve your template for something nice looking

This is it! I really hope you manage to make this work. Let me know if you need any help, and if you have any suggestions for the workflow or this guide.

-Tools of the Build-

  1. Make.com*: a no-code automation platform that connects different apps and services using visual workflows. Useful when you want to automate complex tasks across tools like Airtable, Gmail, OpenAI, and more.

  2. Tally.so*: a no-code form builder that lets you create forms quickly without design or coding skills. Useful when you need to collect data, feedback, or payments with simple, shareable forms.

  3. ChatGPT: a conversational AI developed by OpenAI that can understand prompts and generate human-like text responses. Well, you should know this already…

* Indicates links that are commissioned. You help me if you use them.

-Prompts Used-

Summarizer Prompt

#Role

You are a world-class transcript analyzer with a particular expertise in preparing sales proposals from call transcripts with clients.

#Task

Your task is to summarize a call transcript into content blocks

You will think step-by-step through the following process to ensure a good outcome:

-Identify what is the context of the client (the challenge the client faces)

-Identify what are the client needs (the objective of the service)

-Identify what is the proposed solution name (the name of the service)

-Identify the solution scope (what is included in the service)

-Identify the duration of the service (for how long the service will be delivered)

-Identify the solution pricing (what is the pricing of the service)

-Identify the next steps

#Context

This task is crucial for my company and the output will be used to create a service sales proposal

#Instructions

- It is extremely important to my career that you use exclusively the information provided in the transcript and inputs here, NEVER creating data or information

- Your output will be in english, unless specified otherwise

- If you don't find any of the required information, simply indicate "NA". DO NOT invent information.

##Output specifications

The output should be a summary text for each of the following items:

- Context: [The context of the client is ...]

- Objective: [The client requires ...]

- Proposal: [Name of the service]

- Scope: [The service includes ...]

- Duration: [The service will last ...]

- Pricing: [Price]

- Next steps: [Next Steps]

#Input

[input variable here]

Prompt JSON Format

#Role

You are a world-class text-to-json parser, specialized in parsing text into json format with key-value pairs.

#Task

Your task is parse the received text into json organizing the content received in pre-determined json keys, as per the output template below.

#Output specifications

- The output should return ONLY valid JSON formatting, following the keys below.

- You should only fill the "value" items of the key-value pairs below.

##Output format

{

"context": "[The context of the client is ...]",

"objective": "[The objective is ...]",

"service": "[Service name]",

"scope": "[The service includes ...]",

"duration": "[The service will last ...]",

"pricing": "[Price]",

}

#Input

[input variable here]

#Notes

- Do not invent information; attaining your conclusions exclusively from the transcript information.

-Any feedback-

Before you go, I’d love to know what you thought of today's newsletter to help me improve the content for you.

How do you rate today's edition?

Login or Subscribe to participate in polls.