> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encord.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Timers in Projects

You can programmatically use timers to view the time spent on Projects, Stages, Tasks, Users and more.

<CodeGroup>
  ```python Timers - All Data theme={"dark"}

  from datetime import datetime

  from encord import EncordUserClient

  # --- Configuration ---
  SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your access key
  PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the project unique ID

  # --- Connect to Encord ---
  user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
      ssh_private_key_path=SSH_PATH,
      # For US platform users use "https://api.us.encord.com"
      domain="https://api.encord.com",
  )

  project = user_client.get_project(PROJECT_ID)

  # --- Get Time Entries ---
  start_date = datetime(2025, 1, 1)
  end_date = datetime(2025, 6, 8)

  # Returns all data
  time_entries = list(project.list_time_spent(start=start_date, end=end_date))
  print(time_entries)
  ```

  ```python Timers - Projects  theme={"dark"}

  from collections import defaultdict
  from datetime import datetime

  from encord import EncordUserClient

  # --- Configuration ---
  SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your access key
  PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the project unique ID

  # --- Connect to Encord ---
  user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
      ssh_private_key_path=SSH_PATH,
      # For US platform users use "https://api.us.encord.com"
      domain="https://api.encord.com",
  )

  project = user_client.get_project(PROJECT_ID)

  # --- Get Time Entries ---
  start_date = datetime(2025, 1, 1)
  end_date = datetime(2025, 6, 8)

  # Returns all data
  time_entries = list(project.list_time_spent(start=start_date, end=end_date))

  # Filters for total Project time
  total_time = sum(entry.time_spent_seconds for entry in time_entries)
  print(f"Total time for project: {total_time} sec ({total_time / 60:.1f} min)")

  ```

  ```python Timers - Stages  theme={"dark"}

  from collections import defaultdict
  from datetime import datetime

  from encord import EncordUserClient

  # --- Configuration ---
  SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your access key
  PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the project unique ID

  # --- Connect to Encord ---
  user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
      ssh_private_key_path=SSH_PATH,
      # For US platform users use "https://api.us.encord.com"
      domain="https://api.encord.com",
  )

  project = user_client.get_project(PROJECT_ID)

  # --- Get Time Entries ---
  start_date = datetime(2025, 1, 1)
  end_date = datetime(2025, 6, 8)

  # Returns all data
  time_entries = list(project.list_time_spent(start=start_date, end=end_date))

  # Filters for total time by stage
  stage_time = defaultdict(int)
  for entry in time_entries:
      stage_time[entry.workflow_stage.title] += entry.time_spent_seconds

  for stage, seconds in sorted(stage_time.items(), key=lambda x: x[1], reverse=True):
      print(f"Stage: {stage:<25} | {seconds:>5} sec | {seconds / 60:>5.1f} min")

  ```

  ```python Timers - Tasks  theme={"dark"}

  from collections import defaultdict
  from datetime import datetime

  from encord import EncordUserClient

  # --- Configuration ---
  SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your access key
  PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the project unique ID

  # --- Connect to Encord ---
  user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
      ssh_private_key_path=SSH_PATH,
      # For US platform users use "https://api.us.encord.com"
      domain="https://api.encord.com",
  )

  project = user_client.get_project(PROJECT_ID)

  # --- Get Time Entries ---
  start_date = datetime(2025, 1, 1)
  end_date = datetime(2025, 6, 8)

  # Returns all data
  time_entries = list(project.list_time_spent(start=start_date, end=end_date))

  # Filters for task time

  task_time = defaultdict(int)
  for entry in time_entries:
      task_time[str(entry.workflow_task_uuid)] += entry.time_spent_seconds

  for task, seconds in sorted(task_time.items(), key=lambda x: x[1], reverse=True):
      print(f"Task UUID: {task} | {seconds:>5} sec | {seconds / 60:>5.1f} min")
  ```

  ```python Timers - Users  theme={"dark"}

  from collections import defaultdict
  from datetime import datetime

  from encord import EncordUserClient

  # --- Configuration ---
  SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your access key
  PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the project unique ID

  # --- Connect to Encord ---
  user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
      ssh_private_key_path=SSH_PATH,
      # For US platform users use "https://api.us.encord.com"
      domain="https://api.encord.com",
  )

  project = user_client.get_project(PROJECT_ID)

  # --- Get Time Entries ---
  start_date = datetime(2025, 1, 1)
  end_date = datetime(2025, 6, 8)

  # Returns all data
  time_entries = list(project.list_time_spent(start=start_date, end=end_date))

  # Filters for user

  user_time = defaultdict(int)
  for entry in time_entries:
      user_time[entry.user_email] += entry.time_spent_seconds

  for user, seconds in sorted(user_time.items(), key=lambda x: x[1], reverse=True):
      print(f"User: {user:<30} | {seconds:>5} sec | {seconds / 60:>5.1f} min")
  ```
</CodeGroup>
