Blackbird is the new automation backbone for the language technology industry. It provides enterprise-scale automation and orchestration with a simple no-code/low-code platform, enabling organizations to identify, vet, and automate as many processes as possible—not just localization workflows, but any business or IT process. This repository contains an application deployable on Blackbird and usable within the workflow editor.
AEM (Adobe Experience Manager) is a Content Management System (CMS) that allows users and organizations to easily build websites, apps, and manage web pages and content. AEM is used by developers and marketers to organize and distribute content across digital channels. This app supports both the on-premise version of AEM and the AEM as a Cloud Service version.
This app supports connecting to both AEM Cloud and on-premise versions of AEM.
Before connecting to AEM Cloud, ensure you have the following:
- An AEM Cloud instance running and accessible from the Blackbird platform.
- The Blackbird AEM plugin installed on your AEM instance. Distribution and installation instructions are available here (see prerequisites 1–8). An AEM maintainer or developer should perform this installation. If you use the on-premise version, follow these instructions.
- A technical account and a private key created for it, allowing you to obtain a certificate to connect to AEM (after installing the plugin). See the
Steps to Create Technical Accountsection below for instructions. - The base URL for your AEM environment (e.g.,
https://author-xxxx-xxxxx.adobeaemcloud.com).
- Open Cloud Manager.
- Select the required program.

- Open the Developer Console for the required Author environment.

- Switch to the
Integrationstab and create a new technical account.

- Expand the created private key and click
Viewto see the data.

- Use the
Downloadbutton to obtain the raw data and store it in a file or another location for integration.

- Navigate to Apps and search for AEM.
- Click Add Connection.
- Name your connection for future reference (e.g., 'My AEM').
- Fill in the following fields:
- Base URL: Your AEM base URL (e.g.,
https://author-xxxx-xxxxx.adobeaemcloud.com) - Integration JSON certificate: The integration certificate in JSON format, found in the Developer Console. Example:
{ "ok": true, "integration": { "imsEndpoint": "ims-na1.adobelogin.com", ... }, "statusCode": 200 }
- Base URL: Your AEM base URL (e.g.,
- Click Connect.
- Confirm that the connection appears and the status is Connected.
Before connecting to AEM on-premise, ensure you have the following:
- An AEM instance running and accessible from the Blackbird platform.
- The Blackbird AEM plugin installed on your AEM instance. Distribution and installation instructions are available here (prerequisites 1–8). An AEM maintainer or developer should perform this installation.
- The base URL for your AEM environment (e.g.,
https://aem.example.com). - A username and password for the AEM instance. The user must have sufficient permissions to perform the required actions.
- Navigate to Apps and search for AEM.
- Click Add Connection.
- Name your connection for future reference (e.g., 'My AEM').
- Fill in the following fields:
- Base URL: Your AEM base URL (e.g.,
https://aem.example.com) - Username: Your AEM username
- Password: Your AEM password
- Base URL: Your AEM base URL (e.g.,
- Click Connect.
- Confirm that the connection appears and the status is Connected.
Blackbird relies on built-in AEM rules to determine which content to translate.
You can find and configure these rules in AEM under Tools > Operations > Translation Rules.
For more information on configuring translation rules, see the official documentation.
While the general translation rules cover many standard component properties, they don't automatically know about the specific fields in your custom-built AEM components. To ensure your custom content is translated, you must add specific rules for your component's resource type.
Let's use an example. Suppose you have a custom "Announcement" component, and you need to translate its tagline field.
Find the sling:resourceType of your component and the exact name of the property you want to translate. You can do this using CRXDE Lite by navigating to an instance of the component on a page.
In this example, the component node will have the following key information:
- Path:
/content/your-org/.../page-you-want-to-translate - Resource Type:
your-org/components/announcement - Property to translate:
tagline
Navigate to your project's translation rules in the /content section, click "Add component" and add new component using sling:resourceType and propery name. Make sure to click Save button once you've finished configuration.
- Search content: Search for content based on provided criteria.
- Download content: Download content as HTML. Requires a content ID. This action supports the following optional input:
- Include reference content: If set to true, referenced content (other pages, content fragments, experience fragments, etc.) will be included in the downloaded HTML.
- Upload content: Upload content from HTML. Requires an HTML file and target path as input. This action supports the following inputs:
- Content (required): The interoperable HTML, XLIFF, or original JSON file to upload.
- Source language (required): The language path segment in the source content URL. Example: If your content path is
/content/my-site/en-us/page, specify/en-usas the source language. - Target language (required): The language path segment to replace the source language. Example: To convert from
/content/my-site/en-us/pageto/content/my-site/fr-fr/page, specify/fr-fras the target language. - Overwrite main content path (optional): Completely replaces the source content path to which language inputs will be applied. Useful for testing and requires "Skip references" to be set to true.
- Skip references (optional): If set to true, only the main (root) content item will be updated; reference content will not be updated.
- Ignore reference content errors (optional): When set to true, errors that occur while updating reference content will be ignored. Errors will be visible in the action output.
- Get asset tags: Get the tags for a specific asset.
- Update asset tags: Update the tags for a specific asset.
- Remove asset tags: Remove specific tags from an asset.
- Change tags: Add or remove tags from any content (pages, experience fragments, assets, etc).
- On content created or updated: Polling event that periodically checks for new or updated content. If any content is found, the event is triggered.
- On tag added: Periodically checks for new content with specified tags. If any content is found, the event is triggered.
Note on compatible content: Blackbird supports all content types in the default page hierarchy: pages, content fragments, experience fragments, assets, etc. Support for ‘Guides’ and ‘DITA’ content is currently in beta.
Below is an example of how to set up a translation workflow with the AEM and DeepL apps to automatically translate content in AEM and send it to DeepL for translation.
Workflow steps:
- The
On content created or updatedevent is triggered every hour and checks for new or updated content in AEM. If any content is found, the event is triggered. - In the loop, the
Download contentaction downloads the content from AEM in HTML format. - The
Translate documentaction of theDeepLapp sends the downloaded content to DeepL for translation. - The
Replace using regexaction of theBlackbird Utilitiesapp replaces the original path with the target path in the translated content.
- The
Upload contentaction uploads the translated content back to AEM.
This demo showcases a flexible and highly configurable alternative to a traditional AEM Connector using Blackbird.io.
With Blackbird, you can:
- Automatically pull content from Adobe Experience Manager (AEM)
- Orchestrate translation or transformation workflows
- Push localized or modified content back into AEM
- Add human checkpoints, AI enrichment, and custom routing
Unlike standard AEM connectors, Blackbird.io gives you full control over the process, with no-code configuration and enterprise-grade flexibility.
import { YouTube } from '@astro-community/astro-embed-youtube';
Would you like to use this app or have feedback on our implementation? Reach out to us using the established channels or create an issue.




