OpenCTI playbooks and automation

OpenCTI playbooks label, score, enrich and route incoming intelligence or open cases without manual steps, but they require the Enterprise Edition license. This page covers design choices, setup, testing with execution traces and the limits to confirm first.

On this page

What OpenCTI playbooks automate and when a team needs them

OpenCTI playbooks automate labeling, scoring, enrichment, routing and case creation for data as it enters the platform. They are an Enterprise Edition feature, so a team running only the Community Edition, licensed under the Apache License 2.0, cannot use them. Before planning a build, decide whether automation is needed at all, because the license requirement affects cost and procurement from the first day. Manual handling usually stops scaling when the same triage steps repeat on most items. A threat intelligence team receiving steady volumes of reports, indicators and connector feeds may find analysts spending their time on tagging, confidence assignment and enrichment rather than on analysis. Inconsistency is the second warning sign: when two analysts label the same kind of indicator differently, downstream searches, sharing decisions and reporting drift apart. A playbook replaces those repeated steps with a defined flow that runs the same way each time, so analysts review exceptions and high-priority items instead of every record.

The decision is easier when you inventory the work first. List the steps analysts perform on incoming data, then mark which ones follow fixed rules and which need human judgment. Fixed-rule steps, such as applying a standard label to a known source or creating a case for a defined class of object, are candidates for automation. Judgment-heavy steps, such as deciding whether an actor attribution holds, should stay with analysts, possibly with a review step built into the flow. Ask Filigran's documentation, or your implementation partner, which triggers and actions your OpenCTI version provides, because capabilities differ between releases and this page does not list them.

Plan for the risks that automation introduces. A playbook that scores or routes incorrectly will repeat that error across every matching item, so the rules need named owners, a review schedule and a rollback path. Feeds from connectors can change format or volume, which may alter what a playbook matches. Build a short test set of representative items and record expected outcomes before enabling any flow on production data. Execution traces are the main evidence that a flow did what its designer intended, so confirm that your installation keeps them long enough for your review cycle.

Cost has three parts. The Enterprise Edition license is a recurring cost and must cover the features you intend to use, so confirm whether playbooks are included in the subscription you are quoted and whether the license is delivered on premises or as SaaS. Trial and free licenses are available for evaluation and for some non-governmental use, but confirm eligibility in writing. Build effort is a one-time cost that grows with the number of distinct flows, the number of data sources and the number of review rules. Ongoing effort covers maintaining flows as feeds and OpenCTI releases change. Ask any quote to separate license, design, build, testing and support, and to state what is included in each.

Which playbook actions fit which intelligence workflows

This table compares five core playbook actions against the workflow each fits, the data it depends on, the main risk of running it unreviewed, and what to confirm in the Enterprise Edition documentation. Read each row before enabling an action in a shared deployment. The main takeaway is that automated changes to shared intelligence need a review step, and the license tier that includes playbooks should be confirmed first.

Playbook actionWorkflow it fitsData it depends on and main riskWhat to confirm in Enterprise Edition docs
LabelingTriage of incoming reports and indicators into a consistent classificationSource metadata and the agreed label taxonomy. Risk: mislabeled objects spread through shared views and exports.Which entity types the trigger covers, and whether label changes are logged.
ScoringPrioritizing indicators and reports for analyst queuesConfidence and score fields set by feeds and analysts. Risk: an automated score can be mistaken for analyst judgment.How scores are written, whether they overwrite manual values, and what triggers an update.
EnrichmentAdding context from connected sources before an analyst reviews an objectExisting observables and connector outputs. Risk: a noisy or untrusted source adds false relationships.Which connectors can run inside a playbook, and how they handle rate limits and failures.
Routing to teams or segmentsSending objects to the team or organization that owns the follow-upOrganization assignments, segments and authorized members. Risk: sensitive intelligence reaches a group that should not see it.How routing interacts with organization-based data segregation and member permissions.
Opening casesStarting incident response, RFI or takedown work from a defined triggerTrigger conditions, case templates and default assignees. Risk: case floods that bury analysts, or cases opened on weak data.Which case types a playbook can create, and which fields it populates automatically.

How a playbook moves data through the OpenCTI platform

A playbook in OpenCTI does not run as a single block of logic inside the web application. It depends on three deployment pieces working together: the platform itself, which provides the user interface and the GraphQL API, Python workers that consume RabbitMQ messages to perform asynchronous writes, and connectors that import, enrich and export data. Before you design a playbook, map each step you intend to automate to one of these pieces, because that mapping determines where the work happens, what it depends on, and how long it takes to become visible to analysts.

When a playbook changes an object, such as adding a label, setting a score or creating a relationship, the change is not necessarily written to the knowledge graph in the same request that triggered it. The platform publishes the operation as a message to RabbitMQ, and a Python worker picks it up and applies it to the data stores. Elasticsearch or OpenSearch, Redis and the knowledge graph behind them are then updated as the worker completes its work. The practical consequence is that a playbook can finish its logic while the resulting data is still queued. Under load, or when workers are scaled down, that gap grows.

This asynchronous path matters in two ways. First, timing: if a downstream playbook step, a dashboard or a TAXII feed depends on a value written by an earlier step, it may read stale data unless you design for the delay. Second, load: a playbook that fans out many updates across a large import creates a burst of queued messages that workers must drain, and that burst competes with imports and enrichment connectors for the same capacity. Your sizing decisions for workers and RabbitMQ should account for playbook volume, not only for ingestion.

Before you rely on any timing or load estimate, confirm exactly which components execute each playbook step in your release. Ask the vendor or check the release documentation for each action type, and record whether it is handled synchronously by the platform or queued to workers or a connector. Then test a representative playbook in a non-production environment and compare the execution trace with the time at which the change appears in the interface and the API. Repeat the test with a realistic import volume so you can see how queue depth behaves under the load you expect.

Building and testing a first OpenCTI playbook

This sequence takes a playbook from an agreed intelligence workflow to a tested, signed-off automation running in production. Each step produces a record the team can review, so changes to labels, scores and routing are deliberate and traceable.

  1. Confirm the license and release line

    Before any build work, confirm that your deployment runs the OpenCTI Enterprise Edition, because playbooks are an Enterprise Edition feature under the proprietary OpenCTI Enterprise Edition License rather than the Apache 2.0 Community Edition. Record the exact version in use and whether it is a regular release or an LTS line, since LTS releases require a specific LTS license key and receive only critical bug and security fixes after stabilization. Confirm the license scope and the release line with Filigran or your reseller in writing. The step is done when the license, version and release channel are recorded in the project file and the test and production instances run the same line.

  2. Agree the intelligence workflow to automate

    Write down the manual workflow the playbook will replace, such as triaging newly imported indicators, labeling reports by source, or opening a case for high-confidence items. Name the business owner who signs off the rules, the analysts who receive the output, and the cases that must stay manual. Keep the first scope narrow so that one trigger, one decision path and one action can be tested end to end. The step closes with a short rule document listing each condition, the label or score it sets, the routing target and the exception path. Ask the platform owner to confirm which triggers and actions your release supports, since this varies by version.

  3. Define the data the playbook reads and writes

    Map every object type, attribute, label, score and relationship the playbook will read from and write to. Identify which fields come from connectors and which are set by analysts, because a playbook that overwrites analyst judgment creates disputes later. Confirm the scoring scale and label taxonomy with the intelligence team, and check that the service account running the playbook has the permissions needed for those writes and no broader access. The step is complete when the data map is reviewed and each write has a named owner and a rollback note.

  4. Build the playbook in a non-production instance

    Build the playbook in a non-production OpenCTI instance that matches production on release line, connectors and permissions as closely as your environment allows. Keep the trigger filter, condition logic and actions as small as the rule document requires, and add comments or descriptions to each node so reviewers can follow the logic. Export the playbook definition and store it in version control so every change has an author and a reason. The step is done when the playbook saves cleanly and the reviewer confirms that each node matches a line in the rule document.

  5. Run the playbook against sample data

    Create or load test objects that cover the cases in the rule document: the normal path, each exception, and at least one object that should not trigger the playbook at all. Use data that resembles production but contains no sensitive or client-identifying content. Trigger the playbook through the same path production will use, whether that is a connector import, a manual creation or a stream event. The step produces a dated test log that lists each test object, the expected outcome and the observed outcome.

  6. Review labels, scores and routing on test objects

    Check each test object against the agreed rules. Confirm that labels, scores and routing match the rule document exactly, that objects outside the trigger are untouched, and that no analyst-set value was overwritten. Look for side effects such as duplicate relationships, unexpected cases or notifications sent to the wrong group. Log every mismatch, fix the playbook, and rerun the full test set rather than only the failing case. The step is done when every test object passes and the reviewer signs the test log.

  7. Review the execution trace

    Open the execution trace for each test run and read it step by step. Confirm that each node ran in the expected order, that conditions evaluated as designed, and that failed or skipped steps have a clear reason. Check how the playbook behaves when an enrichment source is slow or unavailable, and when a write is rejected because of permissions. Keep representative traces with the test log, since they are the evidence reviewers and auditors will ask for when they want to see how automated decisions were made. Confirm the trace retention you rely on with the platform owner.

  8. Promote the playbook after sign-off

    Once the business owner and intelligence lead approve the test log and traces, promote the exported playbook to production through the same version-controlled path used for the build. Enable it with the agreed trigger scope, watch the first production executions closely, and compare them with the test expectations. Record the approval, the version promoted, the rollback procedure and the owner who can disable it. The step is complete when the first production runs match the expected results and the change record is filed.

How to test playbooks with execution traces before production

Treat every test run of an OpenCTI playbook as evidence. Before a playbook touches production intelligence, open the execution trace for a single known input and confirm three things for every step: that it ran, that it ran in the order your design specifies, and that it acted on the intended object, such as the indicator, report or observable that triggered the run. Walk the trace step by step against your design document. A step that ran on an object you did not expect usually points to a filter or routing defect, even when the final output looks correct. Confirm the exact status labels and field names shown in your version's trace view, because they can differ between releases.

Know what a failed or skipped step looks like before you test. A failed step normally shows an error state and stops the steps that depend on its output, so check whether the run ended there and whether any partial writes happened first. A skipped step is more dangerous because the run can still report success. A filter condition that evaluates to false, a missing field that a later step reads as empty, or a branch that is never taken will leave a step unexecuted without an obvious error. For each test case, write down the state each step should show before you run it, so an unexpected skip stands out when you review the trace.

Build the test set deliberately rather than relying on a sample of live feed data. Include ordinary inputs, then the edge cases most likely to break labeling, scoring, enrichment and routing: duplicate indicators arriving from two feeds, indicators with missing fields such as no confidence value or no validity dates, and objects carrying conflicting labels, such as both a malicious and a benign marker. For each case, record the expected final object state and the expected trace path. Use data that resembles your feeds but is sanitized. Illustratively, a duplicate pair should produce one merged object or one enrichment request, and the trace should show which of those happened.

Re-run the same inputs after every change to confirm the output is stable. After any edit to a playbook, filter, connector or scoring rule, replay the full test set and compare both the traces and the resulting objects with your baseline. Differences in step order, extra enrichment calls or changed scores need an explanation before promotion. Keep baselines and playbook exports under version control together. Also confirm with Filigran's documentation for your version how execution traces are retained, how long they stay queryable, whether they can be exported and who can review them. These answers determine whether your test evidence and production traces survive an audit or incident review. Playbooks are an Enterprise Edition feature, so the test environment must run under a license that covers them.

Access, audit and data handling for automated changes

Playbooks change data, create cases and call external services without a person approving each step, so they need the same controls as any other privileged change. The cards below cover who can author and enable them, how their owners authenticate, what gets logged, how data is separated between organizations, and where connector credentials are kept. Confirm each control in your own environment before you enable automation on production data.

Who may create and enable playbooks

Treat each playbook as code that writes to the knowledge base at scale. Decide which roles may create, edit, test and enable one, and whether the same person can author and activate a change. Limit production enablement to a small, named group. Confirm which permissions the platform grants per role and whether a playbook acts under the rights of a particular user, so you know what a disabled or departed account leaves running.

Authentication for editors and service accounts

Playbook authors, and any accounts that drive automation through the GraphQL API, need authentication you can govern. OpenCTI supports local users, LDAP and several federated strategies, and defining SSO strategies is an Enterprise Edition feature from version 7.260224.0. Confirm that editors sign in through your identity provider, that API tokens used by automation have named owners, and that access is removed promptly when someone changes role or leaves.

Audit trail for automated changes

Automated changes are reviewable only if the platform records who or what made them. The Enterprise Edition adds activity monitoring and audit logs, which is the basis for reviewing playbook edits and enablement. Confirm that creation, edit, enablement and execution events appear in the logs, whether writes made by executions are attributed in a way you can trace, how long records are retained, and whether they can be exported to your SIEM. Test with a deliberate change before relying on this.

Organization-based data segregation

Organization segregation limits which data a user or workflow can see and change, and it is an Enterprise Edition feature. For playbooks, the key question is whether an automation running for one organization can read or write data owned by another, including shared intelligence imported from partners. Decide the segregation model before building enrichment or routing rules. Confirm with a test account that a playbook scoped to one organization cannot modify another organization's entities.

Credentials for connectors and external actions

Playbooks that enrich data, open tickets or push indicators to other tools need credentials for those services, and connectors need their own. Confirm where each secret is stored (environment configuration, a secrets manager or the platform), who can read it through the interface or API, and whether playbook exports expose it. Plan rotation, and check that revoking a credential stops the actions that depend on it. Keep secrets out of playbook definitions that colleagues share or review.

Keeping playbooks working across OpenCTI upgrades

Every OpenCTI upgrade is a change to the automation that labels, scores, enriches and routes your data, so plan playbook testing as part of the upgrade, not as an afterthought. OpenCTI uses date-based version numbers. Regular releases follow the pattern x.YYMMDD.z, and LTS releases follow x.YYMMDD.z-lts.n, where the date is the release or LTS branching date. Non-LTS releases ship when they are ready, from daily to weekly, so a team on a regular release will meet frequent change to the platform that its playbooks depend on.

Long-term support lines give a slower and more predictable pace. According to the OpenCTI product life cycle documentation, LTS releases occur every six months and each is supported for one year, which creates a six-month overlap between consecutive LTS versions. LTS images are distributed as container images, but you need a specific LTS license key to run them. Confirm with Filigran that your license covers the LTS line you intend to run before you schedule the upgrade. After the one-month stabilization period, an LTS release receives only critical bug and security fixes, so new playbook features will not arrive on that line and you will need to move to a newer LTS line within its support window.

Three controls make upgrades manageable. First, keep a playbook change log that records, for each playbook, the OpenCTI version it was built or last tested on, its trigger, filters, actions, connector dependencies, owner and the reason for each change. Second, maintain a regression test set: a small collection of representative entities, such as an indicator, a malware object and a report, each chosen to exercise every branch of your playbooks, with expected labels, scores, enrichment results and routing outcomes. Compare the execution traces from the new version with the expected results after each run. Third, run the upgrade on a staging instance that matches production in version, connectors, enrichment credentials and a representative copy of the data, so failures appear before users depend on the result.

The most important open question is how playbook definitions migrate between versions. Confirm with the OpenCTI documentation or Filigran support whether exported playbooks import into a newer release without edits, whether a change to a trigger, filter or action type breaks existing steps, whether stored playbooks are upgraded in place during the platform migration, and whether you can roll back to the previous version after a database migration has run. Write down the answers in your change log, then test them in staging. Your rollback plan should state the backup you will restore, who approves the rollback and how long the team will keep the previous version ready before retiring it.

Limits to confirm before you commit to playbook design

Playbook designs depend on what the platform can actually trigger, run and recover from. The cards below list the limits to verify with Filigran or in a test environment before you fix the design, so the build does not rest on assumptions about your release.

Trigger types in your release

Confirm the exact set of trigger types available in your Enterprise Edition release, such as events on entity creation, update or enrichment. Check the list against the release notes and the playbook editor in a test instance, because trigger coverage changes between versions. Record which triggers you need for labeling, scoring and routing, and note any that are missing before you draw the design.

Available actions and integrations

Confirm which actions a playbook can perform, including setting labels, changing scores, enriching from connectors and opening cases, and which external integrations it can call. Ask Filigran for the authoritative list for your release and verify each action you plan to use in a sandbox. Actions that depend on a connector also need that connector deployed and licensed in your environment.

Throughput under your data volume

Measure how quickly playbooks process events at the volume your feeds and connectors actually generate. Throughput depends on platform workers, RabbitMQ queue depth and the backing search cluster, so test with realistic bundles rather than sample data. Confirm with Filigran how playbook execution is scheduled, so you can tell whether a backlog is a sizing issue or a design issue.

Behavior when playbooks conflict

Determine what happens when two playbooks trigger on the same entity and write conflicting labels, scores or routing. Check whether execution order is deterministic, whether later writes overwrite earlier ones, and whether one playbook can re-trigger another in a loop. Test these cases explicitly and document an ownership rule for each entity type before enabling both playbooks in production.

Retry and error handling

Confirm how a failed action is retried, how many attempts occur, how long the platform waits between them, and whether a failed step blocks later steps. Check where failed executions are recorded and whether they can be replayed after the cause is fixed. Ask Filigran for the documented behavior for your release, then verify it by forcing a failing connector in a test environment.

Execution traces and audit evidence

Confirm what each execution trace records, including the input entity, each step's outcome, timestamps and any error output, and how long traces are retained. Check whether traces are visible to the users who need them and whether they can be exported for review. If auditors or incident responders will rely on these records, confirm retention and access controls with Filigran before you design around them.

What do OpenCTI playbooks cost to build, and what do they need from our team?

Which costs come with an OpenCTI playbook project?

Three cost components apply: Enterprise Edition licensing from Filigran, the infrastructure you run, and design and build effort. Playbooks are an Enterprise Edition feature, so a license is required before any playbook can run. Filigran sets license pricing, so request it directly from Filigran. Infrastructure is paid to your cloud provider or data center. The documented sizing starts with 2 cores and at least 8 GB RAM for the platform, plus Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage. DeployOpen quotes design and build effort from a written scope, so the quote shows who pays for each component.

What part of an OpenCTI playbook project is one-time?

Design, build, initial testing and handover documentation are usually one-time costs. Licensing, hosting, backups and platform upgrades recur for as long as the platform runs. OpenCTI publishes a new LTS line every 6 months, and each line is supported for 1 year, so upgrade planning repeats on that schedule. LTS releases also require an LTS license key, and after a one-month stabilization period they receive only critical bug and security fixes. Playbooks may need rework when connectors or data models change. Ask the quote to separate one-time work from any retainer for ongoing support.

What drives OpenCTI playbook effort up during design and build?

Four factors move effort most. The number of workflows is the first, since each playbook needs its own triggers, conditions, actions and tests. Data quality is the second: inconsistent labels, missing fields and duplicate entities force extra logic before a playbook can score or route data reliably. Integrations are the third, including MISP, TheHive and any connectors that feed or export data. Test coverage is the fourth. Testing with execution traces takes time, and more paths through a playbook mean more traces to review. Ask the quote to state the assumed count for each factor.

Can our own team build simple OpenCTI playbooks without a partner?

Yes, a team can build simple playbooks in-house if it understands the STIX2-based knowledge schema, the web application and the GraphQL API. A simple playbook typically applies one labeling, scoring or routing rule under a single trigger. Start with a non-production instance and an Enterprise Edition trial license, which Filigran offers. Partner help becomes more useful when playbooks span several integrations, depend on messy data or must pass a formal review. Confirm your team's skills against Filigran's Enterprise Edition documentation before deciding.

How long does a first OpenCTI playbook take to deliver?

The duration depends on scope, and no fixed timeline applies to every project. A single playbook with one trigger, one integration and clean input data is much smaller than a set of playbooks that open cases and route data across several tools. Readiness also matters: the platform, its dependencies and the Enterprise Edition license should be in place before build starts. Most DeployOpen engagements are fixed-scope, so the timeline is agreed in writing before work begins. Ask for the timeline to be tied to the playbook count, integrations and test plan in the written scope.

What infrastructure must be ready before building OpenCTI playbooks?

The platform needs its dependencies running first. The documented requirements include Elasticsearch 8.0 or OpenSearch 2.9 or later, Redis 7.1 or later, RabbitMQ 3.11 or later, and S3-compatible storage such as MinIO. Sizing starts at 2 cores and 8 GB RAM for the platform and 2 cores, 8 GB RAM and 16 GB SSD for Elasticsearch or OpenSearch. The documentation also recommends at least one platform node for every 3 workers. Playbooks run on this stack, so test capacity matters as much as the license. Confirm sizing for your expected volume with Filigran and your infrastructure team before the build starts.

What should a quote for OpenCTI playbook work include?

A useful quote lists each playbook by name, with its trigger, conditions, actions and integrations. It states the assumptions about data quality, such as expected label conventions and how duplicates are handled. It includes the test plan, including which execution traces prove each path works, and the handover documentation. It names what is excluded: the Enterprise Edition license, infrastructure, upgrades and future changes. It also sets out who provides what, including your access to the platform, test data and named reviewers. Finally, it notes whether ongoing support is offered as a retainer and how changes after handover are priced.

How DeployOpen scopes and delivers OpenCTI playbooks

DeployOpen designs OpenCTI playbooks around the labeling, scoring, enrichment and routing steps your team needs, and builds them in a self-hosted OpenCTI deployment inside your own infrastructure. Each engagement starts from a written scope that states which playbook behaviors are included and whether your OpenCTI edition supports them.

How we scope

  • Confirm whether your team needs Community Edition or Enterprise Edition, since playbooks are an Enterprise Edition feature.
  • List each playbook trigger, condition, action and data source that the written scope covers.
  • Record which connectors, enrichment sources and downstream case tools the playbooks will call.
  • Agree on the target platform version and the LTS or regular release line before design starts.

How we build

  • Design playbooks as reviewable steps that label, score, enrich or route data, or open cases.
  • Test each playbook against sample STIX objects and inspect the execution traces it produces.
  • Check how playbook load interacts with platform workers, RabbitMQ queues and connector throughput.
  • Keep credentials for external tools in the platform's secret handling, not inside playbook definitions.

How we hand over

  • Deliver a document for each playbook covering purpose, triggers, inputs, outputs and known limits.
  • Provide test cases and expected execution traces so your team can rerun validation after changes.
  • Walk your operators through reading traces, disabling a playbook and escalating a failing step.
  • Record the platform version, edition license and configuration baseline used at handover.

How we support

  • Review playbooks again when you upgrade OpenCTI, since regular and LTS releases change over time.
  • Retest affected playbooks after connector or external tool changes that alter their inputs or outputs.
  • Offer ongoing support and upgrades as a retainer, sized to the playbooks you run.
  • Confirm current license terms with Filigran for each edition before you plan automation at scale.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.