Reference · Tools

Beeminder

Manage goals, datapoints, charges, and user data in Beeminder

Action Productivity v1

The Beeminder node connects your BusyBot workflows to your Beeminder commitment contracts, letting you read and write goals, log datapoints, create charges, and fetch user info. You could, for example, automatically post a datapoint every time you close a GitHub issue or complete a Todoist task. It covers the full Beeminder REST API v1, including operations most users never touch manually, like short-circuiting a goal or stepping down its pledge level.

Node type
Action
Parameters
28
Outputs
Output, Error
Credentials
Beeminder API

Beeminder

Manage goals, datapoints, charges, and user data in Beeminder

Overview

Beeminder is a commitment contract and goal-tracking service. This tool provides full CRUD operations for datapoints (create, create all, get, get many, update, delete), goals (create, get, get many, get archived, update, refresh, short circuit, step down, cancel step down, uncle/derail), charges (create), and user info (get). Uses the Beeminder REST API v1.

Category: Productivity
Tool Name: beeminder
Version: 1

Appearance: Icon: lucide-Target | Color: #FFD301

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Beeminder API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Chargecharge
Datapointdatapoint
Goalgoal
Useruser

Operations

Each resource has its own Operation list. Pick the resource first, then the operation.

ResourceOperationValueDescription
ChargeCreatecreateCreate a charge
DatapointCreatecreateCreate datapoint for goal
DatapointCreate AllcreateAllCreate multiple datapoints at once
DatapointDeletedeleteDelete a datapoint
DatapointGetgetGet a single datapoint
DatapointGet ManygetAllGet many datapoints for a goal
DatapointUpdateupdateUpdate a datapoint
GoalCreatecreateCreate a new goal
GoalGetgetGet a specific goal
GoalGet ManygetAllGet many goals
GoalGet ArchivedgetArchivedGet archived goals
GoalUpdateupdateUpdate a goal
GoalRefreshrefreshRefresh goal data
GoalShort CircuitshortCircuitShort circuit pledge
GoalStep DownstepDownStep down pledge
GoalCancel Step DowncancelStepDownCancel step down
GoalUncleuncleDerail a goal and charge the pledge amount
UserGetgetGet user information

Parameters

Charge: Create

ParameterTypeRequiredDefaultDescription
AmountnumberYes0Charge amount in USD.
Additional FieldscollectionNo{}Optional fields for the charge.
— NotestringNoCharge explanation.
— Dry RunbooleanNofalseWhether to test charge creation without actually charging.

Datapoint: Create

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
ValuenumberYes1Datapoint value to send.
Additional FieldscollectionNo{}Optional fields for the datapoint.
— CommentstringNoComment for the datapoint.
— TimestampstringNoTimestamp for the datapoint (ISO 8601 or any parseable date string). Defaults to “now” if omitted.
— Request IDstringNoString to uniquely identify a datapoint (for idempotency).

Datapoint: Create All

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
DatapointsjsonYes[]Array of datapoint objects to create. Each object should contain “value” and optionally “timestamp”, “comment”, etc.

Datapoint: Delete

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Datapoint IDstringYesThe ID of the datapoint.

Datapoint: Get

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Datapoint IDstringYesThe ID of the datapoint.

Datapoint: Get Many

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo30Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}Sorting and paging options for the query.
— SortstringNoidAttribute to sort on.
— PagenumberNo1Page number (1-indexed). Used only when Return All is false. (shown when Return All is false)
— Per PagenumberNo25Number of results per page. Default 25. Ignored without page parameter. (shown when Return All is false)

Datapoint: Update

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Datapoint IDstringYesThe ID of the datapoint.
Update FieldscollectionNo{}Datapoint fields to change.
— ValuenumberNo1Datapoint value to send.
— CommentstringNoComment for the datapoint.
— TimestampstringNoTimestamp for the datapoint (ISO 8601 or any parseable date string). Defaults to the existing timestamp if not provided.

Goal: Create

ParameterTypeRequiredDefaultDescription
Goal SlugstringYesUnique URL-safe identifier for the goal.
Goal TitlestringYesHuman-readable title for the goal.
Goal TypeoptionsYeshustlerType of goal. Hustler = “Do More”, Biker = “Odometer”, Fatloser = “Do Less / weight loss”, Gainer = “Gain weight”, Inboxer = “Inbox Fewer”, Drinker = “Do Less”.
Options: hustler, biker, fatloser, gainer, inboxer, drinker, custom
Goal UnitsstringYesUnits for the goal (e.g., “hours”, “pages”, “pounds”).
Additional FieldscollectionNo{}Optional fields for the new goal.
— Goal DatestringNoTarget date for the goal (ISO 8601 or any parseable date string). Converted to Unix timestamp.
— Goal ValuenumberNoTarget value for the goal.
— RatenumberNoRate of progress (units per day).
— Initial ValuenumberNo0Initial value for today’s date.
— SecretbooleanNofalseWhether the goal is secret.
— Data PublicbooleanNofalseWhether the data is public.
— Data SourceoptionsNomanualData source for the goal.
Options: api, ifttt, zapier, manual
— Dry RunbooleanNofalseWhether to test the endpoint without actually creating a goal.
— TagsjsonNo[]JSON array of alphanumeric tags for the goal. Replaces existing tags.

Goal: Get

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Additional FieldscollectionNo{}Optional query settings for the goal.
— Include DatapointsbooleanNofalseWhether to include datapoints in the response.
— EmaciatedbooleanNofalseWhether the goal attributes road, roadall, and fullroad will be stripped from the goal object.

Goal: Get Many

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}Optional query settings for the goal list.
— EmaciatedbooleanNofalseWhether the goal attributes road, roadall, and fullroad will be stripped from the goal objects.

Goal: Get Archived

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}Optional query settings for the archived goal list.
— EmaciatedbooleanNofalseWhether the goal attributes road, roadall, and fullroad will be stripped from the goal objects.

Goal: Update

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.
Update FieldscollectionNo{}Goal fields to change.
— TitlestringNoHuman-readable title for the goal.
— Y-AxisstringNoY-axis label for the goal graph.
— TminstringNoMinimum date for the goal in format yyyy-mm-dd.
— TmaxstringNoMaximum date for the goal in format yyyy-mm-dd.
— SecretbooleanNofalseWhether the goal is secret.
— Data PublicbooleanNofalseWhether the data is public.
— Road AlljsonNo[]Array of arrays defining the bright red line. Each sub-array contains [date, value, rate] with exactly one field null.
— Data SourceoptionsNoData source for the goal. Use empty string for manual entry.
Options: api, ifttt, zapier, or an empty string for manual entry
— TagsjsonNo[]JSON array of alphanumeric tags for the goal. Replaces existing tags.

Goal: Refresh

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.

Goal: Short Circuit

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.

Goal: Step Down

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.

Goal: Cancel Step Down

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.

Goal: Uncle

ParameterTypeRequiredDefaultDescription
Goal NamestringYesThe slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname.

User: Get

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}Optional query settings for the user record.
— AssociationsbooleanNofalseWhether to include associations in the response.
— Diff SincestringNoOnly goals and datapoints that have been created or updated since this timestamp will be returned (ISO 8601 or any parseable date string).
— SkinnybooleanNofalseWhether to return minimal user data.
— EmaciatedbooleanNofalseWhether the goal attributes road, roadall, and fullroad will be stripped from any goal objects returned with the user.
— Datapoints CountnumberNoNumber of datapoints to include.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The object Beeminder returns is merged onto the item JSON at the top level — there is no wrapper property, so returned fields sit next to (and overwrite same-named) fields from the incoming item. The rest of the input JSON passes through and binary data is forwarded unchanged.

Every operation returns at least one output item. Operations that return a list fan out to one output item per element:

OperationOutput items
Datapoint: Create AllOne item per datapoint created
Datapoint: Get ManyOne item per datapoint
Goal: Get ManyOne item per goal
Goal: Get ArchivedOne item per archived goal
All other operationsOne item, carrying the single object returned

Reference the returned fields directly by expression — for a datapoint, {{ $json.value }} and {{ $json.comment }}.

Two parameters shape how much comes back and are worth setting deliberately: Emaciated strips the road, roadall and fullroad attributes from goal objects, and Include Datapoints (Goal: Get) adds the goal’s datapoints to the returned goal.

Usage Examples

  • Add a datapoint to a Beeminder goal
  • Create a new Beeminder goal with a target rate
  • Get all datapoints for a goal
  • Update a goal’s settings
  • Derail a goal (uncle) to trigger the pledge charge
  • Create a charge against your Beeminder account
  • Get authenticated user information
  • Batch create multiple datapoints at once

Example Configuration

Add a single datapoint to a goal, with a comment and an explicit timestamp:

{
  "type": "beeminder",
  "parameters": {
    "resource": "datapoint",
    "operation": "create",
    "goalName": "exercise",
    "value": 30,
    "additionalFields": {
      "comment": "{{ $json.workoutName }}",
      "timestamp": "2024-01-15T10:00:00Z",
      "requestid": "{{ $json.sessionId }}"
    }
  }
}

Read back the most recent datapoints for a goal, newest page first:

{
  "type": "beeminder",
  "parameters": {
    "resource": "datapoint",
    "operation": "getAll",
    "goalName": "weight",
    "returnAll": false,
    "limit": 50,
    "options": {
      "sort": "timestamp",
      "page": 1,
      "per": 50
    }
  }
}

Create a Do More goal with a daily rate:

{
  "type": "beeminder",
  "parameters": {
    "resource": "goal",
    "operation": "create",
    "slug": "daily-steps",
    "title": "Daily Steps Goal",
    "goal_type": "hustler",
    "gunits": "steps",
    "additionalFields": {
      "goaldate": "2025-12-31",
      "goalval": 10000,
      "rate": 100,
      "initval": 0,
      "datapublic": true,
      "datasource": "api"
    }
  }
}

Derail a goal on purpose so the pledge is charged:

{
  "type": "beeminder",
  "parameters": {
    "resource": "goal",
    "operation": "uncle",
    "goalName": "{{ $json.goalSlug }}"
  }
}

Test a charge without actually taking the money:

{
  "type": "beeminder",
  "parameters": {
    "resource": "charge",
    "operation": "create",
    "amount": 25,
    "additionalFields": {
      "note": "Missed workout goal",
      "dryrun": true
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Track goals and add datapoints to Beeminder commitment contracts via the Beeminder API.

Frequently asked questions

What credentials do I need to use this node?

You need a Beeminder API credential, configured in BusyBot as the 'beeminderApi' credential type. You can find your Beeminder API token in your Beeminder account settings. Without this credential set up, the node will not authenticate and all operations will fail.

What happens when a goal operation fails — does the whole workflow stop?

The node has two separate outputs: Output and Error. A failed operation routes to the Error output rather than stopping your workflow dead. This lets you wire up fallback logic — for instance, sending yourself a notification if a datapoint fails to post — without needing a separate error-handling node wrapping everything.

Can I log multiple datapoints at once, or do I have to post them one at a time?

Both options are available. The node exposes a 'create' operation for a single datapoint and a 'create all' operation for posting multiple datapoints in one call. Use 'create all' when you're syncing a batch of historical data or aggregating results from another source to avoid making a separate API call per entry.

What does 'uncle/derail' actually do to a goal?

The uncle/derail operation forces an immediate derailment on a goal, triggering the pledge charge as if you had genuinely gone off the road. This is a destructive action — it charges your card and resets the goal. It's exposed here for edge-case automation (like a penalty triggered by an external system), but treat it carefully; there is no confirmation step inside the workflow.

Does this node cover archived goals, or only active ones?

Both. Under the goal resource there is a dedicated 'get archived' operation separate from the standard 'get many'. If your workflow needs to audit or restore archived goals, you'll need to use that specific operation — 'get many' will not return archived goals.

Build with the Beeminder node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Beeminder API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.