Skip to main content
Teamwork.com is a project management platform for client work: projects are split into task lists, tasks and milestones, people log time against them, and teams discuss the work in comments, messages and notebooks. This connector reads your site’s data through the official Teamwork API (v3) and brings your projects, tasks and subtasks, task lists, milestones, time entries, people, companies, tags, comments, messages, notebooks, risks, project updates, custom field definitions, workflows and their stages, job roles and skills.
This connector covers Teamwork.com (Projects). Teamwork Desk, the help desk product, has its own connector. The connector only reads data: it never creates, changes or deletes anything in Teamwork.

Configuring Teamwork as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Teamwork option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

The Teamwork API uses the API token of a Teamwork user. In Teamwork, click your profile picture, then Edit My Details, open the API & Mobile tab and copy your API token.
  • Site URL: the address you open Teamwork with, for example https://yourcompany.teamwork.com (sites hosted in Europe use https://yourcompany.eu.teamwork.com). If you access Teamwork through a custom domain, use your teamwork.com address.
  • API Token: the token copied from Teamwork.
  • Start Date: the earliest date synced on the first sync and on full syncs. Tasks, task lists, milestones, time entries, messages and notebooks last updated since this date are loaded, and so are the comments and message replies posted since it. The other tables are always loaded whole.
Teamwork only returns what the user of the API token can see. Use the API token of a site administrator to sync every project; with another user, the projects, tasks and time entries that user has no access to are left out. If the token stops working (for example, the user is removed), the syncs fail until you update it.
Teamwork allows 150 API requests per minute per site (300 on the Scale plan), shared by every integration of the site. The connector stays under that limit, so a long history takes a while on the first sync.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: keep the suggested type. Tasks, Task Lists, Milestones, Time Entries, Messages, Message Replies, Comments and Notebooks are Incremental: each sync reads only what changed since the previous one (starting one day earlier, to be safe) and merges it into the table. The other tables are Full table: each sync reads them whole and replaces the table.
Comments and Message Replies are read by the date they were posted. Each incremental sync also checks the comments and replies edited since the previous sync, so an edit to an older one is updated too. Tasks, Time Entries and Milestones deleted in Teamwork stay in the table, marked as deleted.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). The main tables are read incrementally, so an hourly or daily sync works well. Optionally, you can configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here. Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Permissions and features

Each table needs the user of the API token to be allowed to see its data, and some need a Teamwork feature that is not on every plan or may be turned off (for example Risks, Workflows, Notebooks, Messages or time tracking). When Teamwork refuses a table (no permission) or does not offer it on your site (feature not available), the sync skips only that table, says which tables were skipped and why, and keeps syncing the others. Give the user the permission, enable the feature in Teamwork, or deselect those tables.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description. Tasks join task lists on tasks.tasklist_id = tasklists.id, and task lists join projects on tasklists.project_id = projects.id. Time entries, milestones, messages, notebooks, comments, risks and project updates carry project_id. People join on people.id with the user columns (created_by, updated_by, user_id, assignee_user_ids…), companies on companies.id = projects.company_id, and tags on tags.id with the tag_ids lists.

Fields by stream

Fields marked String (JSON) hold a nested object or list as JSON text; use your warehouse’s JSON functions to read them. Dates and times are in UTC.
Every task and subtask (parent_task_id is set on subtasks), including completed tasks, tasks of archived projects and deleted tasks (status = deleted). Tasks have no project column: join tasklist_id with tasklists.id to get project_id.Table: tasks · Primary key: id · Sync: Incremental (updated_at)
Task lists of every project, including completed and deleted ones.Table: tasklists · Primary key: id · Sync: Incremental (updated_at)
Milestones of every project, including completed and deleted ones.Table: milestones · Primary key: id · Sync: Incremental (updated_at)
Time logged by people on projects and tasks (minutes, billable flag and rates), including entries of archived projects and deleted entries.Table: time_entries · Primary key: id · Sync: Incremental (updated_at)
Messages posted on projects.Table: messages · Primary key: id · Sync: Incremental (updated_at)
Replies to project messages, read by creation date.Table: message_replies · Primary key: id · Sync: Incremental (created_at)
Comments on tasks, milestones, notebooks, files and links (object_type / object_id say on what), read by posting date.Table: comments · Primary key: id · Sync: Incremental (posted_date_time)
Project notebooks and their contents.Table: notebooks · Primary key: id · Sync: Incremental (updated_at)
Every project the user can see, of every type (normal, templates, personal, tentative), including archived ones (status = inactive).Table: projects · Primary key: id · Sync: Full table
Users of the site: your team, clients, collaborators, placeholder resources and service accounts, including deleted users (deleted).Table: people · Primary key: id · Sync: Full table
Companies (your own company and client companies).Table: companies · Primary key: id · Sync: Full table
Tags used on projects, tasks, time entries and other items.Table: tags · Primary key: id · Sync: Full table
Categories used to group projects.Table: project_categories · Primary key: id · Sync: Full table
Definitions of the custom fields of projects, tasks and companies.Table: custom_fields · Primary key: id · Sync: Full table
Workflows (boards of stages tasks move through), including archived ones.Table: workflows · Primary key: id · Sync: Full table
Stages of every workflow.Table: workflow_stages · Primary key: workflow_id, id · Sync: Full table
Job roles assigned to people.Table: job_roles · Primary key: id · Sync: Full table
Skills assigned to people.Table: skills · Primary key: id · Sync: Full table
Project risks (source, probability, impact).Table: risks · Primary key: id · Sync: Full table
Status updates posted on projects (text and health).Table: project_updates · Primary key: id · Sync: Full table