Weekly
Get a weekly CSV of your HubSpot contacts
A full export of your contacts arrives in your inbox every week, ready to open in a spreadsheet.
- Runs
- Weekly
- Apps
- HubSpot
- AI
- Not needed
- Access
- crm.objects.contacts.read
Send this to your assistant
Create a ClickRuntime automation: every Sunday at 7pm, export all my HubSpot contacts with name, email, company and lifecycle stage, and email me the CSV.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A HubSpot contact export is a manual job that people do right before they need it, usually in a hurry. A finance lead wants the list for a mailing, an agency needs a snapshot before a migration, a founder wants a backup in case an import goes wrong. The export screen has limits on properties and size, someone has to wait for an email, and the file is saved wherever the person happened to download it, which means nobody can find last month's version.
Each week, every contact is paged through using HubSpot's API, a CSV file is built with the properties you choose, and it is emailed to you. You get a dated attachment in your inbox on a predictable day.
It is helpful for teams that want a regular backup, an offline analysis file or a feed to another tool.
What you get out of it
A regular backup of your contact data
If a bad import overwrites records or a workflow clears a property, you have last week's file to compare and restore from. Without it, the only copy is the one that is wrong.
Data is ready when needed
Finance, analysts and agencies can use the latest file without asking someone to run an export. The delay that usually accompanies such requests disappears. There is no waiting on whoever happens to have export permission that day.
Snapshots show change over time
Comparing two weekly files shows who was added, who changed lifecycle stage and which fields were edited, which is useful for audits and reporting. That kind of history is hard to rebuild once records have been overwritten.
No row or property surprises
A scripted export pages through all contacts, so you are not stuck with a UI limit that stops the file at a certain size. A scheduled export can cover every record, not only the first page of results.
A searchable archive in your inbox
Dated attachments pile up in a place everybody can search, and you can find a given week's file in seconds. Nobody has to wonder whether a file from last quarter still exists in someone's Downloads folder.
How it works
What happens, step by step
Once a week, ClickRuntime goes through every contact in your HubSpot account.
It builds a CSV file with each contact's name, email, company and lifecycle stage.
The file is emailed to you, with the contact count in the subject line, ready to open in a spreadsheet.
Before it runs live
- Connect HubSpot
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other HubSpot steps into one automation
Under the hood
The code that runs this automation
import csv, io
from clickruntime import on_trigger, credentials, http, notify
FIELDS = ["firstname", "lastname", "email", "company", "lifecyclestage"]
@on_trigger
def run(event):
headers = {"Authorization": f"Bearer {credentials.connection('hubspot', 'work')}"}
rows, params = [], {"limit": 100, "properties": ",".join(FIELDS)}
while True:
page = http.get("https://api.hubapi.com/crm/v3/objects/contacts", headers=headers, params=params).json()
rows += [{f: c["properties"].get(f) or "" for f in FIELDS} for c in page["results"]]
after = page.get("paging", {}).get("next", {}).get("after")
if not after:
break
params["after"] = after
out = io.StringIO()
writer = csv.DictWriter(out, fieldnames=FIELDS)
writer.writeheader()
writer.writerows(rows)
notify.email_me(f"HubSpot contacts export: {len(rows)} contacts", out.getvalue())
return {"contacts": len(rows)}FAQ
Common questions
Which properties are included in the CSV?
Is it safe to email contact data?
Will a large database fit in an email attachment?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Find deals stuck in one stage too long
Each morning you see the open deals that haven't moved in two weeks, before they go cold.
See how it worksGet a daily list of overdue HubSpot tasks
Each weekday you get the tasks that are past due and not done, grouped by owner.
See how it worksGet a weekly list of customers at risk of leaving
Each Monday you get a ranked list of customers who look likely to churn, with a reason for each.
See how it worksKeep exploring
Set up “Get a weekly CSV of your HubSpot contacts” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.