Skip to content
Learni
View all tutorials
Gestion de projet

How to Use Monday.com Effectively in 2026

Lire en français

Introduction

Monday.com is a no-code/low-code platform for project management, workflows, and team collaboration. In 2026, it leads the pack with its intuitive interface, powerful automations, and flexible GraphQL API. Why use it? It centralizes tasks, docs, and metrics, breaking down silos. Imagine a Kanban board that auto-updates via integrations.

This beginner tutorial walks you through every step: from signup to creating boards, UI automations, and scaling with the API. Each step is actionable, complete with mental screenshots and copy-paste code. By the end, you'll manage a real project. Estimated time: 30 min. Value: +50% team productivity.

Prerequisites

  • Free account on monday.com
  • Node.js 20+ installed
  • Code editor (VS Code recommended)
  • Basic knowledge of JSON and JavaScript (not required for UI parts)

Install Dependencies for the API

setup.sh
mkdir monday-tutorial
cd monday-tutorial
npm init -y
npm install node-fetch dotenv
mkdir src
 touch .env
 touch src/query-boards.js
 touch src/create-item.js
 touch src/update-item.js

This script sets up a Node.js project and installs node-fetch for HTTP requests and dotenv for managing environment variables like the API key. Run it in your terminal to prepare the API environment. Pitfall: Don't forget to add your API key to .env later.

Get Your Monday.com API Token

  1. Log in to monday.com.
  2. Go to Profile > Developers > My Access Tokens.
  3. Copy the generated token (it looks like eyJ0eXAiOiJKV1QiLC...).
Create a .env file:

MONDAY_API_KEY=your_token_here

Analogy: This token is like a house key—keep it secret to prevent unauthorized access. Paste it into .env for security.

List Your Existing Boards

src/query-boards.js
require('dotenv').config();
const fetch = require('node-fetch');

async function queryBoards() {
  const apiKey = process.env.MONDAY_API_KEY;
  const query = 'query { boards { id name state } }';

  const response = await fetch('https://api.monday.com/v2', {
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': apiKey
    },
    body: JSON.stringify({ query })
  });

  const data = await response.json();
  console.log(JSON.stringify(data, null, 2));
}

queryBoards().catch(console.error);

This complete script queries all your boards via GraphQL and displays their IDs, names, and states. Run it with node src/query-boards.js. Why GraphQL? Fewer requests than REST. Pitfall: Check data.errors for token issues if invalid.

Create a Board via the UI

  • Click + New > Board.
  • Choose the Task Management template.
  • Name it My 2026 Project.
  • Add columns: Status (People, Status), Person (People), Date (Date).
Tip: Templates speed things up like an IKEA kit. Customize via + Column to fit your workflows.

Create an Item in a Board

src/create-item.js
require('dotenv').config();
const fetch = require('node-fetch');

async function createItem() {
  const apiKey = process.env.MONDAY_API_KEY;
  const boardId = 'VOTRE_BOARD_ID_ICI'; // Remplacez par ID du board du script précédent
  const mutation = `mutation ($boardId: Int!, $itemName: String!) {
    create_item (board_id: $boardId, item_name: $itemName) {
      id
    }
  }`;
  const variables = { boardId: parseInt(boardId), itemName: "Tâche urgente 2026" };

  const response = await fetch('https://api.monday.com/v2', {
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': apiKey
    },
    body: JSON.stringify({ query: mutation, variables })
  });

  const data = await response.json();
  console.log(JSON.stringify(data, null, 2));
}

createItem().catch(console.error);

Replace VOTRE_BOARD_ID_ICI with a board ID (from the previous script). This code creates an item named 'Tâche urgente 2026'. GraphQL variables make it flexible. Pitfall: Board ID must be an integer; parseInt prevents errors.

Set Up UI Automations

  1. Open your board > Automate.
  2. Add: "When status changes to 'Done', notify @member".
  3. Or: "When item created, assign to person".
Analogy: Automations are like built-in Zapier If-Then rules. Test with Run Now to verify.

Update an Item (Status)

src/update-item.js
require('dotenv').config();
const fetch = require('node-fetch');

async function updateItem() {
  const apiKey = process.env.MONDAY_API_KEY;
  const boardId = 'VOTRE_BOARD_ID_ICI';
  const itemId = 'VOTRE_ITEM_ID_ICI'; // ID de l'item créé précédemment
  const columnId = 'status'; // ID colonne statut, vérifiez via query boards
  const mutation = `mutation ($value: JSON!) {
    change_simple_column_value (board_id: ${boardId}, item_id: ${itemId}, column_id: "${columnId}", value: $value) {
      id
    }
  }`;
  const variables = {
    value: JSON.stringify({ label: "Done" })
  };

  const response = await fetch('https://api.monday.com/v2', {
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': apiKey
    },
    body: JSON.stringify({ query: mutation, variables })
  });

  const data = await response.json();
  console.log(JSON.stringify(data, null, 2));
}

updateItem().catch(console.error);

Sets the item status to 'Done'. Replace the IDs. change_simple_column_value works for Status columns. Use JSON.stringify for complex values. Pitfall: Column IDs vary; query your board first to find it.

Detailed Board Query

src/query-board-details.js
require('dotenv').config();
const fetch = require('node-fetch');

async function queryBoardDetails() {
  const apiKey = process.env.MONDAY_API_KEY;
  const boardId = 'VOTRE_BOARD_ID_ICI';
  const query = `query ($boardId: Int!) {
    boards(ids: [$boardId]) {
      id
      name
      columns {
        id
        title
        type
      }
      items {
        id
        name
        column_values {
          id
          text
        }
      }
    }
  }`;
  const variables = { boardId: parseInt(boardId) };

  const response = await fetch('https://api.monday.com/v2', {
    method: 'post',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': apiKey
    },
    body: JSON.stringify({ query, variables })
  });

  const data = await response.json();
  console.log(JSON.stringify(data, null, 2));
}

queryBoardDetails().catch(console.error);

Displays full board details: columns, items, and values. Great for debugging. GraphQL lets you specify exact fields. Pitfall: Limit IDs to avoid timeouts on large boards.

Best Practices

  • Secure the token: Never hardcode it—use .env + .gitignore.
  • Use GraphQL variables: Prevents injections and boosts performance.
  • Rate limiting: Monday caps at 5000/min; add delays for production.
  • Board templates: Reuse for team consistency.
  • Webhooks: Integrate for real-time notifications beyond the API.

Common Errors to Avoid

  • Invalid token: 'Unauthorized' → regenerate it.
  • Missing IDs: Always query before mutating.
  • Wrong column types: Status needs JSON {label: 'Done'}, not a string.
  • No try/catch: Add it for async errors in production.

Next Steps

Explore the official Monday SDK. Integrate with Zapier or Node-RED. Check out our Learni productivity courses to master Airtable, Notion, and more.

How to Use Monday.com Effectively in 2026 | Learni