Inside Logic Apps Standard: How Azure Tables Store Your Workflows

Published: (January 14, 2026 at 06:28 PM EST)
4 min read
Source: Dev.to

Source: Dev.to

Overview

Azure Logic Apps Standard uses Azure Table Storage as its primary persistence layer for:

  • Workflow state
  • Execution history
  • Runtime metadata

This document provides a comprehensive reference to the table architecture, naming conventions, and schema patterns.

Table Categories

Logic Apps Standard organizes data into two distinct table categories:

CategoryScopePurpose
Base TablesLogic App ResourceShared runtime metadata across all workflows
Flow TablesIndividual WorkflowIsolated execution data per workflow

This separation enables workflow isolation, horizontal scaling, and independent lifecycle management.

Base Tables (App‑Level)

Base tables store metadata that applies to the entire Logic App resource. All workflows within a Logic App share these tables.

Table‑naming pattern

flow{LAIdentifier}{suffix}
ComponentDescription
LAIdentifierFirst 15 characters of MurmurHash64(LogicAppName)
suffixTable‑type identifier (see the list below)

Base table types

Table suffixPurposeKey data
flowsMaster workflow registryWorkflow definitions, state, CU assignment
flowruntimecontextRuntime execution contextFlow state, execution cluster type, runtime config
flowaccesskeysWorkflow access keysPrimary/secondary keys for workflow API access
flowsubscriptionsSubscription registrationTenant registration, subscription state
flowsubscriptionsummaryWorkflow counts & summariesFlow counts by state (enabled/disabled)
jobdefinitionsJob scheduler metadataExecution state, retry config, repeat schedules

Example

For a Logic App named OrderProcessing:

LAIdentifier = flow7365adc025615f3

Resulting base tables:

flow7365adc025615f3flows
flow7365adc025615f3flowruntimecontext
flow7365adc025615f3flowaccesskeys
flow7365adc025615f3flowsubscriptions
flow7365adc025615f3flowsubscriptionsummary
flow7365adc025615f3jobdefinitions

Flow Tables (Workflow‑Level)

Flow tables store execution data specific to each workflow. Each workflow gets its own isolated set of tables.

Table‑naming pattern

flow{LAIdentifier}{WFIdentifier}{suffix}
PlaceholderDescription
LAIdentifierFirst 15 characters of MurmurHash64(LogicAppName)
WFIdentifierFirst 15 characters of MurmurHash64(WorkflowId)
suffixTable‑type identifier (e.g., flows, runs, …)

Flow‑table types

Table suffixPurposeKey data stored
flowsWorkflow definition cacheLatest definition, parameters, runtime context, CU
runsRun metadataRun status, timing, trigger info, correlation IDs
historiesTrigger historyTrigger fires, evaluation results, input/output links
actionsAction executionsAction status, timing, input/output blob links
variablesWorkflow variablesVariable name, data type, value links
concurrentrunsConcurrency trackingActive‑run coordination (when concurrency is enabled)

Date‑stamped tables

Action‑related tables are partitioned by date for scalability:

{WFIdentifier}yyyyMMddT000000Z{suffix}

Example: 1c859134ef297b720250114T000000Zactions

Example

For workflow ProcessOrder in the OrderProcessing Logic App:

LAIdentifier = flow7365adc025615f3
WFIdentifier = 1c859134ef297b7

Resulting tables:

flow7365adc025615f31c859134ef297b7flows
flow7365adc025615f31c859134ef297b7runs
flow7365adc025615f31c859134ef297b7histories
flow7365adc025615f31c859134ef297b720250114T000000Zactions
flow7365adc025615f31c859134ef297b720250114T000000Zvariables

Table Key Fields

Base Flows Table (Master Registry)

FieldDescription
FlowIdUnique workflow identifier (GUID)
FlowNameWorkflow name
KindWorkflow type (Stateful / Stateless)
StateEnabled or Disabled
ScaleUnitCU assignment (CU00, CU01, …)
DefinitionCompressedCompressed workflow JSON definition
ParametersCompressedCompressed workflow parameters
RuntimeConfigurationRetention settings, operation options
CreatedTime / ChangedTimeLifecycle timestamps

FlowRuntimeContext Table

FieldDescription
FlowIdWorkflow identifier
FlowStateCurrent workflow state
FlowExecutionClusterTypeExecution cluster (Classic, etc.)
KindWorkflow type
RuntimeConfigurationRuntime settings JSON
FlowSequenceIdSequence identifier

FlowAccessKeys Table

FieldDescription
FlowIdWorkflow identifier
FlowAccessKeyNameKey name (e.g., default)
PrimaryKeyPrimary access key
SecondaryKeySecondary access key

FlowSubscriptions Table

FieldDescription
SubscriptionIdAzure subscription identifier
StateRegistration state (Registered, etc.)
PropertiesTenant ID and registered‑features JSON
RegistrationDateSubscription registration timestamp

FlowSubscriptionSummary Table

FieldDescription
FlowCountsByStateJSON with enabled/disabled workflow counts
FlowId / FlowNameWorkflow reference (for per‑workflow entries)
StateWorkflow state
ScaleUnitCU assignment
DefinitionCompressedCached compressed definition

JobDefinitions Table

FieldDescription
JobIdUnique job identifier
JobPartitionJob partition key
CallbackJob callback type (e.g., LinearSequencerJob)
StateJob state (Completed, Waiting, …)
ExecutionStateCurrent execution state
StartTime / EndTimeJob scheduling window
NextExecutionTimeNext scheduled execution

This reference is intended for developers, architects, and operations engineers who need to understand or troubleshoot the persistence layer of Azure Logic Apps Standard.

Recurrence & Retry Configuration

SettingDescription
RepeatMode / RepeatUnit / RepeatIntervalRecurrence configuration
RetryMode / RetryCount / RetryIntervalRetry configuration
CurrentExecutionCountTotal executions
LastExecutionStatus / LastExecutionTimeMost recent execution info
BinaryMetadata00‑15Compressed job metadata chunks

Runs Table

FieldDescription
FlowId / FlowNameReference to the workflow
StatusSucceeded, Failed, Running, Cancelled
CreatedTime / EndTimeTimestamps for the run
TriggerNameName of the trigger that started the run
CorrelationIdIdentifier for request correlation
ClientTrackingIdClient‑provided tracking identifier
TriggerCompressedCompressed payload of the trigger
OutputsCompressedCompressed payload of the run outputs

Histories Table (Trigger History)

FieldDescription
HistoryNameHistory entry identifier
TriggerNameTrigger reference
FiredBoolean – whether the trigger actually fired
StatusTrigger evaluation result
InputsLinkCompressedLink to trigger inputs (compressed)
OutputsLinkCompressedLink to trigger outputs (compressed)
TrackingIdCorrelation tracking identifier

Actions Table

FieldDescription
ActionNameIdentifier of the action
ActionRepetitionNameLoop iteration index (e.g., 000000)
StatusSucceeded, Skipped, Failed
CodeResult code (OK, ActionSkipped, etc.)
CreatedTime / CompletedTimeTimestamps for when the action started and finished
InputsLinkCompressedLink to the compressed inputs blob
OutputsLinkCompressedLink to the compressed outputs blob
RepeatItemIndexIndex of the loop iteration
RepeatItemScopeNameName of the parent loop action
ErrorError details (if the action failed)

Variables Table

FieldDescription
VariableNameVariable identifier
DataTypeVariable type (Integer, String, Boolean, etc.)
FlowId / FlowNameWorkflow reference
FlowRunSequenceIdRun sequence identifier
OperationIdOperation that modified the variable
OperationSequenceIdOperation sequence
InputsLinkCompressedLink to variable input
ValueLinkCompressedLink to current variable value
CreatedTime / ChangedTimeVariable lifecycle timestamps

Workflow Flows Table (Per‑Workflow Cache)

FieldDescription
FlowId / FlowNameWorkflow identifier
KindWorkflow type (Stateful)
StateEnabled or Disabled
ScaleUnitCU assignment
DefinitionCompressedCompressed latest workflow definition
ParametersCompressedCompressed parameters
RuntimeConfigurationRuntime settings JSON
RuntimeContextCompressed runtime context
FlowSequenceIdDefinition sequence ID
FlowUpdatedTimeLast definition update time

Identifier Generation

Logic Apps uses MurmurHash64 for deterministic, collision‑resistant identifier generation.

Algorithm

// Generate Logic App identifier (LAIdentifier)
string laIdentifier = "flow" + MurmurHash64(logicAppName).Substring(0, 15);

// Generate Workflow identifier (WFIdentifier)
string wfIdentifier = MurmurHash64(workflowId).Substring(0, 15);

// Build the complete table name
string tableName = laIdentifier + wfIdentifier + suffix;

Constraints

  • Table names: Max 63 characters (Azure Table Storage limit)
  • Characters: Lowercase alphanumeric only
  • Hash truncation: 15 characters provides sufficient uniqueness

Quick Reference

Table‑Name Format

Base:   flow{LAIdentifier}{suffix}
Flow:   flow{LAIdentifier}{WFIdentifier}{suffix}
Dated:  flow{LAIdentifier}{WFIdentifier}{yyyyMMddT000000Z}{suffix}

Common Suffixes

SuffixLevelPurpose
flowsBothDefinitions
runsFlowRun history
actionsFlowAction executions
flowsubscriptionsBaseTrigger subscriptions
jobdefinitionsBaseScheduled jobs
Back to Blog

Related posts

Read more »

From Zero to SQS Lambda in 15 Minutes

My AWS Journey I started my AWS journey when I joined my current organization. Before that, I was perfectly happy using VPS and bare‑metal servers. Long story...