Back to Integrations
CMS Integration

Contentful Integration

Sync your Contentful content with IntlPull for seamless translation management. Pull content from your CMS, translate it in IntlPull, and push translations back automatically.

Pull Content

Import localizable fields from Contentful entries

Push Translations

Export translations back to Contentful

Auto Sync

Webhook-triggered automatic synchronization

Multi-locale

Support for all Contentful locales

Requirements

  • Content Delivery API Token - For reading content (free tier)
  • Content Management API Token - For writing translations (paid Contentful plans)
  • Space ID - Your Contentful space identifier

Note: Push functionality requires a paid Contentful plan ($300+/mo) as the Content Management API is not available on the free tier.

Dashboard Setup

The easiest way to connect Contentful is through the IntlPull dashboard.

Configuration Steps

  1. 1Go to your project in the IntlPull dashboard
  2. 2Navigate to Settings → Integrations → Contentful
  3. 3Enter your Contentful Space ID and Environment
  4. 4Add your Content Delivery API token (required)
  5. 5Optionally add Content Management API token for push
  6. 6Select content types to sync and configure auto-sync

SDK Usage

For programmatic access, use the @intlpullhq/contentful package.

Installation

npm install @intlpullhq/contentful
# or
pnpm add @intlpullhq/contentful

Quick Start

import { ContentfulSync } from '@intlpullhq/contentful';
const sync = new ContentfulSync({
// Contentful credentials
spaceId: 'your-space-id',
environment: 'master',
accessToken: 'your-delivery-api-token',
managementToken: 'your-management-api-token', // For push
// IntlPull credentials
projectId: 'your-intlpull-project-id',
apiKey: 'your-intlpull-api-key',
// Configuration
sourceLocale: 'en-US',
contentTypes: ['blogPost', 'page'], // Optional
namespace: 'contentful',
});
// Pull content from Contentful to IntlPull
const pullResult = await sync.pull();
console.log(`Pulled ${pullResult.stats.entriesProcessed} entries`);
// Push translations from IntlPull to Contentful
const pushResult = await sync.push(['de-DE', 'fr-FR']);
console.log(`Pushed ${pushResult.stats.translationsPushed} translations`);

CLI Commands

Sync Contentful from the command line using the IntlPull CLI.

# Pull content from Contentful
npx @intlpullhq/cli contentful pull
# Push translations to Contentful
npx @intlpullhq/cli contentful push --locales de-DE,fr-FR
# Sync specific content types
npx @intlpullhq/cli contentful pull --content-types blogPost,page

Key Naming Convention

Keys are automatically named using the pattern:

{contentType}.{entryId}.{fieldId}

Example: blogPost.abc123xyz.title

Next Steps

    Contentful Integration - IntlPull Documentation | IntlPull