We’ve seeded the repository with few-shot examples of essential tools and workflows commonly used in GTM operations. When a GTM engineer describes a new workflow in natural language, the agent selects relevant examples, applies the user’s instructions along with a meta prompt, and generates a new tool or workflow. It then runs tests and outputs a ready-to-use tool.
You can run these tools repeatedly on any CSV or input source to parse customer websites, extract leads, conduct research and qualification, and push results to destinations like CRMs, Dhisana webhooks, or Clay tables.
This approach creates a cost-efficient and accurate toolchain for GTM engineers—cheaper than LLM-heavy pipelines and more precise than generic solutions, as it’s purpose-built for GTM workflows and playbooks.
Project includes tools for lead discovery, enrichment and qualification, CRM data hygiene, AI-powered outreach content generation and more—helping teams accelerate pipeline generation and reduce manual effort in GTM operations.
All tools are free and open source. Feel free to build, use, contribute, and share feedback.
This repo is vibe code ready: just describe the workflow you want in natural language and you'll have a custom GTM tool up and running in about five minutes.
The project is contributed to and maintained by the Dhisana AI team. Community contributions are welcome!
Dhisana AI also provides a managed offering of these workflows and more. It delivers personalized outreach—including LinkedIn outreach—powered by over 100 signals and sources, all hosted as a secure managed service. You can sign up and get started in 10 minutes at https://www.dhisana.ai.
Vibe code and add your own GTM workflow in 5 min! Vibe coding instructions
View this project on GitHub. Signup and get a 24/7 managed version of this service that runs an AI Agent for you in the cloud with all these workflows and more.
Join the discussion on our Slack community channel.
Follow these steps to spin up the container and run a utility.
- Clone the repository
git clone https://github.com/dhisana-ai/gtm-ai-tools.git cd gtm-ai-tools - Build the Docker image (or run
task docker:build)docker build -t gtm-ai-tools . - Add your API keys to
.env(see API key setup)OPENAI_API_KEY=... OPENAI_MODEL_NAME=gpt-4.1 SERPER_API_KEY=... DHISANA_API_KEY=... HUBSPOT_API_KEY=... CLAY_API_KEY=... CLAY_WEBHOOK_URL=...
- Start the container and open the app
Then browse to http://localhost:8080.
docker run --env-file .env -p 8080:8080 gtm-ai-tools
utils/– Stand‑alone Python utilities.Dockerfile– Container image definition for running the utilities in an Azure Functions compatible environment with Playwright support.requirements.txt– Python dependencies for the utilities..env– Environment variables consumed by the utilities.app/– Simple Flask web app launched when the Docker container starts.
- Ensure Docker is installed. See Installing Docker.
- Obtain API keys and add them to
.env. See API key setup. - Install Git and clone this repository. See Git setup.
- Install Node.js 22+ if you want to generate new utilities. See
Node and Codex installation or run
task setup:codex.
This project ships with a Taskfile.yml for simplified commands. The
task tool is installed inside the Docker image and can
be installed locally using the official script:
curl -sL https://taskfile.dev/install.sh | sh -s -- -b /usr/local/binCommon actions:
-
Build the Docker image
task docker:build
-
Update the repository
task git:pull
-
Run a utility inside the container
task run:command -- call_openai_llm "Hello!"The output of the command is saved to
output/run.login your working directory.
To keep files produced by a command, write them to /workspace inside the
container. The output/ directory on your host maps to this path. For example:
task run:command -- linkedin_search_to_csv \
"site:linkedin.com/in growth hacker" /workspace/results.csv -n 20After the run you will find results.csv inside the output/ directory.
The Taskfile also copies any files created in output/ to /tmp/outputs,
creating that directory if it does not already exist. This provides a stable
location for retrieving results outside the project tree.
To use files from an arbitrary directory on your host, mount that directory when
starting the container. For example to read /tmp/input.csv and produce
/tmp/output.csv:
docker run --env-file .env -v /tmp:/tmp gtm-ai-tools \
python -m utils.find_users_by_name_and_keywords \
/tmp/input.csv /tmp/output.csvYou can also execute any of the scripts directly on your machine without using Docker. Invoke the module with Python and provide normal file paths. For example:
python -m utils.find_users_by_name_and_keywords input.csv output.csvPlace additional stand-alone scripts inside the utils/ directory. After rebuilding the Docker image, start the container again and your tool will appear in the Run a Utility menu of the web app. Each script should include a short docstring describing its purpose.
See Using the utilities for examples of running the sample scripts.
The Codex CLI lets you create new utilities with natural language prompts. It runs on your machine, not inside the container. This repository is vibe code ready—just describe what you want in natural language and you can have your custom workflow ready in 5 min.
- Install Node.js 22+ and the CLI. Run the helper task or follow the
installation guide:
task setup:codex
- Generate a utility from the project root. The
task add_utilitycommand runs the Codex CLI in quiet, fully automated mode:task add_utility -- search_vp_sales "search for VP of sales and push to Dhisana Webhook" - Review the changes, commit and push:
git checkout -b my-feature git commit -am "Add new utility" git push origin my-feature
See docs/vibe_coding_workflows.md for a more detailed walkthrough.
The repository ships with a library of small, focused utilities—fetch a CRM contact, search Google for a company or person, validate an email address, and so on. Feed these examples into the Codex CLI or the coding agent to generate a custom workflow script. Once generated, you simply run that workflow over and over. When processing hundreds or thousands of records, this "generate once and reuse" model is far cheaper and more efficient than dynamically choosing tool combinations at runtime with patterns like MCP or A2A.
Building the Docker image will also install a lightweight Flask web app located
in the app/ directory. When the container starts without any command
arguments, the web interface launches automatically on port 8080:
docker run -p 8080:8080 gtm-ai-toolsOpen http://localhost:8080 in your browser to access the app. The interface shows a Run a Utility page where you can choose a tool and provide the required command‑line parameters. If a utility requires a CSV input you can upload the file directly in the form. When a utility produces a CSV output a download link will be displayed. Plain text output is shown in the page.
- OpenAI Tools – use LLM prompts and web search to research companies and leads.
- MCP Tool Sample – call OpenAI through an MCP server.
- LinkedIn Search to CSV – gather LinkedIn profile URLs from Google.
- Find Company Info – discover a company's website and LinkedIn page.
- Find LinkedIn Profile by Name – look up a profile using a name and keywords.
- Find LinkedIn Profile by Job Title – search by title at a target company.
- Bulk Find LinkedIn Profiles – process a CSV of names to find profiles.
- Find Email and Phone – retrieve contact details with Findymail.
- Push Lead to Dhisana – send lead data to Dhisana for enrichment.
- Push Company to Dhisana – send company data to Dhisana.
- Push Data to Clay – send a row to a Clay table via webhook.
- Get HubSpot Contact – retrieve a CRM contact.
- Create HubSpot Contact – add a new contact if one doesn't exist.
- Update HubSpot Contact – modify contact properties.
- Add HubSpot Note – attach a note to a contact.
- Get Salesforce Contact – retrieve a CRM contact.
- Create Salesforce Contact – add a new contact if one doesn't exist.
- Update Salesforce Contact – modify contact fields.
- Add Salesforce Note – attach a note to a contact.
- Scrape Website HTML (Playwright) – scrape page HTML for lead extraction.
- Extract from Webpage – pull leads and companies from any website.
- Push Leads to Dhisana – send scraped LinkedIn URLs to Dhisana for enrichment and outreach.
- Create Dhisana Webhook – configure your webhook and API key.
Playbooks to train and test the AI agent:
- Common playbooks
- Generic Playwright + LLM scraper
- Integration tools – example services to try when testing new workflows