Skip to main content
Microsoft Planner is a task management application included in Microsoft 365. It allows teams to create plans, organize and assign tasks, share files, and communicate progress, providing a visual way to manage work within Microsoft Teams and other Microsoft 365 apps.

Configuring Microsoft Planner as a Source

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

1. Add account access

You’ll need to authorize Nekt to access your Microsoft Planner data using OAuth. Click on the Microsoft Authorization button and log in with your Microsoft account that has access to the Planner plans you want to sync. The authorization flow will request the following permissions:
  • Access to Microsoft Graph API
  • Read access to Groups and Planner data
Once you’re done authorizing the Nekt application, click Next.
You may need the approval of an administrator to grant the necessary permissions to the Nekt application.If you are not an administrator, you can request the approval from an administrator by clicking on the Request approval button and providing the reason for the approval.The administrator will then need to approve the request by clicking on the Approve button on the Microsoft Entra ID portal.Once the approval is granted, the Nekt application will have the necessary permissions to access your Microsoft Planner data.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis.
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: FULL_TABLE sync is used for all streams.
Incremental sync is not supported. The Microsoft Planner API does not provide reliable modification timestamps for incremental syncing, so all streams use full table sync.
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). Optionally, you can define some additional settings:
  • 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.

Streams and Fields

Below you’ll find all available data streams from Microsoft Planner and their corresponding fields:
Stream containing Microsoft 365 groups that can have Planner plans.
FieldTypeDescription
idStringUnique identifier for the group
displayNameStringGroup display name
descriptionStringGroup description
createdDateTimeDatetimeWhen the group was created
mailStringGroup email address
mailNicknameStringMail nickname/alias
visibilityStringGroup visibility (Public or Private)
classificationStringClassification level (e.g., low, medium, high business impact)
groupTypes[]ArrayArray of group types (e.g., “Unified” for Microsoft 365 groups)
expirationDateTimeDatetimeWhen the group is set to expire (if applicable)
Stream containing Planner plans within Microsoft 365 groups.
FieldTypeDescription
idStringUnique identifier for the plan
titleStringPlan title/name
createdDateTimeDatetimeWhen the plan was created
ownerString(Deprecated) Owner group ID; use container.containerId instead
container.containerIdStringID of the group or roster containing the plan
container.typeStringType of container (e.g., “group”)
container.urlStringURL of the container resource
createdBy.user.idStringID of the user who created the plan
createdBy.user.displayNameStringDisplay name of the creator
createdBy.application.idStringID of the application used to create the plan
createdBy.application.displayNameStringApplication display name
Stream containing buckets (columns) within Planner plans for organizing tasks.
FieldTypeDescription
idStringUnique identifier for the bucket
nameStringBucket display name (e.g., “To Do”, “In Progress”, “Done”)
planIdStringID of the plan this bucket belongs to
orderHintStringOrder hint for displaying buckets in list view
Stream containing plan category labels (up to 25 custom labels per plan).
FieldTypeDescription
idStringPlan ID (matches plans.id)
category1 to category25StringCustom label names defined for the plan
Labels are stored at the plan level. Tasks reference these labels via appliedCategories (e.g., category1: true means the task has the first label applied).
Stream containing individual tasks within Planner plans.
FieldTypeDescription
idStringUnique identifier for the task
titleStringTask title
descriptionStringTask description (if hasDescription is true)
planIdStringID of the plan containing this task
bucketIdStringID of the bucket (column) this task is in
percentCompleteIntegerCompletion percentage (0, 25, 50, 75, or 100)
priorityIntegerPriority level (0-10, where lower is higher priority)
hasDescriptionBooleanWhether the task has a description
createdDateTimeDatetimeWhen the task was created
startDateTimeDatetimeTask start date
dueDateTimeDatetimeTask due date
completedDateTimeDatetimeWhen the task was completed
assignmentsStringJSON string of user assignments (user ID → assignment details)
appliedCategoriesStringJSON string of applied labels (category1-category25)
createdBy.user.idStringID of user who created the task
createdBy.user.displayNameStringDisplay name of creator
completedBy.user.idStringID of user who completed the task
completedBy.user.displayNameStringDisplay name of completer
checklistItemCountIntegerTotal number of checklist items
activeChecklistItemCountIntegerNumber of incomplete checklist items
referenceCountIntegerNumber of external references/attachments
orderHintStringOrder hint for list view
assigneePriorityStringOrder hint for assignee’s task list
conversationThreadIdStringID of the conversation thread
previewTypeStringTask preview type (automatic, noPreview, checklist, description, reference)
Stream containing deeper details for Planner tasks, such as rich descriptions, checklist items, and external references. This is a child stream of Tasks.
FieldTypeDescription
task_idStringTask ID (matches tasks.id)
descriptionStringTask notes/description content
previewTypeStringPreview type
checklistStringChecklist items, formatted as a JSON string
referencesStringExternal references/links, formatted as a JSON string

Data Model

The following diagram illustrates the relationships between the data streams in Microsoft Planner. Groups contain Plans, which in turn contain Buckets, Tasks, and Labels. Tasks further contain Task Details.

Use Cases for Data Analysis

This guide outlines valuable business intelligence use cases when consolidating Microsoft Planner data, along with ready-to-use SQL queries that you can run on Explorer.

1. Task Completion Overview

Track task completion rates across plans and identify bottlenecks. Business Value:
  • Monitor project progress
  • Identify overdue tasks
  • Track team productivity
WITH task_metrics AS (
    SELECT
        p.title AS plan_name,
        COUNT(*) AS total_tasks,
        SUM(CASE WHEN t.percentComplete = 100 THEN 1 ELSE 0 END) AS completed_tasks,
        SUM(CASE WHEN t.dueDateTime < CURRENT_TIMESTAMP AND t.percentComplete < 100 THEN 1 ELSE 0 END) AS overdue_tasks,
        AVG(t.percentComplete) AS avg_completion
    FROM
        nekt_raw.microsoft_planner_tasks t
        JOIN nekt_raw.microsoft_planner_plans p ON t.planId = p.id
    GROUP BY
        p.title
)
SELECT
    plan_name,
    total_tasks,
    completed_tasks,
    overdue_tasks,
    ROUND(avg_completion, 1) AS avg_completion_pct,
    ROUND(completed_tasks * 100.0 / NULLIF(total_tasks, 0), 1) AS completion_rate_pct
FROM
    task_metrics
ORDER BY
    total_tasks DESC
plan_nametotal_taskscompleted_tasksoverdue_tasksavg_completion_pctcompletion_rate_pct
Q1 Marketing Campaign4532571.171.1
Product Launch 20243828273.773.7
Website Redesign52181234.634.6
Customer Onboarding2320087.087.0

2. Tasks by Bucket (Status Distribution)

Analyze task distribution across buckets to understand workflow status. Business Value:
  • Visualize work-in-progress
  • Identify workflow bottlenecks
  • Balance workload across stages
SELECT
    p.title AS plan_name,
    b.name AS bucket_name,
    COUNT(*) AS task_count,
    SUM(CASE WHEN t.percentComplete = 100 THEN 1 ELSE 0 END) AS completed,
    SUM(CASE WHEN t.percentComplete > 0 AND t.percentComplete < 100 THEN 1 ELSE 0 END) AS in_progress,
    SUM(CASE WHEN t.percentComplete = 0 THEN 1 ELSE 0 END) AS not_started
FROM
    nekt_raw.microsoft_planner_tasks t
    JOIN nekt_raw.microsoft_planner_plans p ON t.planId = p.id
    JOIN nekt_raw.microsoft_planner_buckets b ON t.bucketId = b.id
GROUP BY
    p.title,
    b.name
ORDER BY
    p.title,
    task_count DESC
plan_namebucket_nametask_countcompletedin_progressnot_started
Q1 Marketing CampaignTo Do150312
Q1 Marketing CampaignIn Progress120120
Q1 Marketing CampaignDone181800
Product Launch 2024Backlog8008

3. Overdue Tasks Report

Identify tasks that are past their due date and need attention. Business Value:
  • Prioritize late tasks
  • Track deadline adherence
  • Improve project timeline management
SELECT
    t.title AS task_title,
    p.title AS plan_name,
    b.name AS bucket_name,
    t.dueDateTime AS due_date,
    DATE_DIFF('day', t.dueDateTime, CURRENT_DATE) AS days_overdue,
    t.percentComplete AS percent_complete,
    t.priority
FROM
    nekt_raw.microsoft_planner_tasks t
    JOIN nekt_raw.microsoft_planner_plans p ON t.planId = p.id
    JOIN nekt_raw.microsoft_planner_buckets b ON t.bucketId = b.id
WHERE
    t.dueDateTime < CURRENT_TIMESTAMP
    AND t.percentComplete < 100
ORDER BY
    days_overdue DESC,
    t.priority ASC
LIMIT 20
task_titleplan_namebucket_namedue_datedays_overduepercent_completepriority
Update documentationWebsite RedesignIn Progress2024-11-0126501
Review contractsQ1 Marketing CampaignTo Do2024-11-101703
Design mockupsProduct Launch 2024In Progress2024-11-1512755

Implementation Notes

Stream Hierarchy

The connector extracts data using a parent-child relationship:
  1. Groups are extracted first (Microsoft 365 groups with Planner enabled)
  2. Plans are extracted for each group
  3. Buckets, Labels, and Tasks are extracted for each plan
  4. Task Details are extracted for each task

API Rate Limiting

To ensure reliable extractions and stay within Microsoft Graph API throttling limits, the connector implements proactive rate limiting. It limits API calls to a maximum of 4 requests per second. If a 429 (Too Many Requests) error does occur, the connector will automatically wait the specified time and retry the request.

JSON Fields

Some fields are stored as JSON strings for compatibility with data lake formats:
  • tasks.assignments - Contains user assignment details
  • tasks.appliedCategories - Contains applied label categories
  • task_details.checklist - Contains checklist item details for a task
  • task_details.references - Contains external links and references mapped to a task
Use JSON_EXTRACT or equivalent functions to parse these fields in your queries.

Priority Values

Task priority is stored as an integer (0-10):
  • 1 = Urgent
  • 3 = Important
  • 5 = Medium (default)
  • 9 = Low

Percent Complete Values

Microsoft Planner uses specific values for completion percentage:
  • 0 = Not started
  • 25 = Started
  • 50 = Halfway
  • 75 = Almost done
  • 100 = Completed

Permissions Note

The connector only extracts data from Microsoft 365 groups that the authenticated user has access to. To extract data from all groups in an organization, ensure the account has appropriate permissions or use an admin account.

Skills for agents

Download Microsoft Planner skills file

Microsoft Planner connector documentation as plain markdown, for use in AI agent contexts.