
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
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.
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.
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.Streams and Fields
Below you’ll find all available data streams from Microsoft Planner and their corresponding fields:Groups
Groups
Stream containing Microsoft 365 groups that can have Planner plans.
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the group |
displayName | String | Group display name |
description | String | Group description |
createdDateTime | Datetime | When the group was created |
mail | String | Group email address |
mailNickname | String | Mail nickname/alias |
visibility | String | Group visibility (Public or Private) |
classification | String | Classification level (e.g., low, medium, high business impact) |
groupTypes[] | Array | Array of group types (e.g., “Unified” for Microsoft 365 groups) |
expirationDateTime | Datetime | When the group is set to expire (if applicable) |
Plans
Plans
Stream containing Planner plans within Microsoft 365 groups.
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the plan |
title | String | Plan title/name |
createdDateTime | Datetime | When the plan was created |
owner | String | (Deprecated) Owner group ID; use container.containerId instead |
container.containerId | String | ID of the group or roster containing the plan |
container.type | String | Type of container (e.g., “group”) |
container.url | String | URL of the container resource |
createdBy.user.id | String | ID of the user who created the plan |
createdBy.user.displayName | String | Display name of the creator |
createdBy.application.id | String | ID of the application used to create the plan |
createdBy.application.displayName | String | Application display name |
Buckets
Buckets
Stream containing buckets (columns) within Planner plans for organizing tasks.
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the bucket |
name | String | Bucket display name (e.g., “To Do”, “In Progress”, “Done”) |
planId | String | ID of the plan this bucket belongs to |
orderHint | String | Order hint for displaying buckets in list view |
Labels
Labels
Stream containing plan category labels (up to 25 custom labels per plan).
| Field | Type | Description |
|---|---|---|
id | String | Plan ID (matches plans.id) |
category1 to category25 | String | Custom 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).Tasks
Tasks
Stream containing individual tasks within Planner plans.
| Field | Type | Description |
|---|---|---|
id | String | Unique identifier for the task |
title | String | Task title |
description | String | Task description (if hasDescription is true) |
planId | String | ID of the plan containing this task |
bucketId | String | ID of the bucket (column) this task is in |
percentComplete | Integer | Completion percentage (0, 25, 50, 75, or 100) |
priority | Integer | Priority level (0-10, where lower is higher priority) |
hasDescription | Boolean | Whether the task has a description |
createdDateTime | Datetime | When the task was created |
startDateTime | Datetime | Task start date |
dueDateTime | Datetime | Task due date |
completedDateTime | Datetime | When the task was completed |
assignments | String | JSON string of user assignments (user ID → assignment details) |
appliedCategories | String | JSON string of applied labels (category1-category25) |
createdBy.user.id | String | ID of user who created the task |
createdBy.user.displayName | String | Display name of creator |
completedBy.user.id | String | ID of user who completed the task |
completedBy.user.displayName | String | Display name of completer |
checklistItemCount | Integer | Total number of checklist items |
activeChecklistItemCount | Integer | Number of incomplete checklist items |
referenceCount | Integer | Number of external references/attachments |
orderHint | String | Order hint for list view |
assigneePriority | String | Order hint for assignee’s task list |
conversationThreadId | String | ID of the conversation thread |
previewType | String | Task preview type (automatic, noPreview, checklist, description, reference) |
Task Details
Task Details
Stream containing deeper details for Planner tasks, such as rich descriptions, checklist items, and external references. This is a child stream of Tasks.
| Field | Type | Description |
|---|---|---|
task_id | String | Task ID (matches tasks.id) |
description | String | Task notes/description content |
previewType | String | Preview type |
checklist | String | Checklist items, formatted as a JSON string |
references | String | External 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
SQL query
SQL query
- AWS
- GCP
Sample Result
Sample Result
| plan_name | total_tasks | completed_tasks | overdue_tasks | avg_completion_pct | completion_rate_pct |
|---|---|---|---|---|---|
| Q1 Marketing Campaign | 45 | 32 | 5 | 71.1 | 71.1 |
| Product Launch 2024 | 38 | 28 | 2 | 73.7 | 73.7 |
| Website Redesign | 52 | 18 | 12 | 34.6 | 34.6 |
| Customer Onboarding | 23 | 20 | 0 | 87.0 | 87.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
SQL query
SQL query
- AWS
- GCP
Sample Result
Sample Result
| plan_name | bucket_name | task_count | completed | in_progress | not_started |
|---|---|---|---|---|---|
| Q1 Marketing Campaign | To Do | 15 | 0 | 3 | 12 |
| Q1 Marketing Campaign | In Progress | 12 | 0 | 12 | 0 |
| Q1 Marketing Campaign | Done | 18 | 18 | 0 | 0 |
| Product Launch 2024 | Backlog | 8 | 0 | 0 | 8 |
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
SQL query
SQL query
- AWS
- GCP
Sample Result
Sample Result
| task_title | plan_name | bucket_name | due_date | days_overdue | percent_complete | priority |
|---|---|---|---|---|---|---|
| Update documentation | Website Redesign | In Progress | 2024-11-01 | 26 | 50 | 1 |
| Review contracts | Q1 Marketing Campaign | To Do | 2024-11-10 | 17 | 0 | 3 |
| Design mockups | Product Launch 2024 | In Progress | 2024-11-15 | 12 | 75 | 5 |
Implementation Notes
Stream Hierarchy
The connector extracts data using a parent-child relationship:- Groups are extracted first (Microsoft 365 groups with Planner enabled)
- Plans are extracted for each group
- Buckets, Labels, and Tasks are extracted for each plan
- 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 detailstasks.appliedCategories- Contains applied label categoriestask_details.checklist- Contains checklist item details for a tasktask_details.references- Contains external links and references mapped to a task
JSON_EXTRACT or equivalent functions to parse these fields in your queries.
Priority Values
Task priority is stored as an integer (0-10):1= Urgent3= Important5= Medium (default)9= Low
Percent Complete Values
Microsoft Planner uses specific values for completion percentage:0= Not started25= Started50= Halfway75= Almost done100= 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.