---
title: "Scrape Jira with AutoGen — EnConvert API"
description: "Learn how to scrape Jira with AutoGen using EnConvert Distill to turn any Jira issue URL into a clean LLM-ready summary without custom parsing logic"
canonical: "https://www.enconvert.com/solutions/scrape-jira-with-autogen-enconvert-api"
locale: "en"
---

# How to Scrape Jira with AutoGen

Developers who scrape Jira with AutoGen hit a wall fast. Jira’s API returns structured JSON with nested fields, markup-heavy description bodies, and comment threads that require parsing and normalisation before any LLM can reason over them. Preprocessing ticket bodies, stripping Atlassian Document Format markup, flattening comment threads, and writing glue code that breaks every time a ticket schema varies — all of that sits between the Jira API and a working agent. EnConvert Distill removes that step: pass a Jira page URL and get back a clean, LLM-ready summary in one API call, ready to inject directly into an AutoGen agent’s context.

## Example

```python
import asyncio
import os

import requests
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient

JIRA_ISSUE_URL = "https://your-domain.atlassian.net/browse/PROJ-123"

# Step 1: Submit the Jira issue URL to Enconvert Distill
response = requests.post(
    "https://api.enconvert.com/v2/distill",
    headers={
        "X-API-Key": os.environ["ENCONVERT_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
        "urls": [JIRA_ISSUE_URL],
        "schema": {
            "summary": "one-paragraph summary of the issue",
            "problem": "the main problem described in the issue",
            "blockers": "list of blockers mentioned, if any",
            "next_actions": "list of next actions or open tasks",
        },
    },
    timeout=60,
)
response.raise_for_status()

# Step 2: Extract the structured data from the response
item = response.json()["results"][0]
if item.get("error") or not item.get("data"):
    raise RuntimeError(f"Distill failed for {JIRA_ISSUE_URL}: {item.get('error')}")
summary = item["data"]

print("Jira issue summary:")
print(summary)


# Step 3: Pass the extracted data into an AutoGen agent's context
async def main() -> None:
    model_client = OpenAIChatCompletionClient(
        model="gpt-4.1",
        api_key=os.environ["OPENAI_API_KEY"],
    )
    agent = AssistantAgent(
        name="jira_issue_agent",
        model_client=model_client,
        system_message=(
            "You analyse Jira issues. Use the supplied issue "
            "summary to identify the problem, blockers, and "
            "next actions. Do not invent missing details."
        ),
    )
    result = await agent.run(
        task=(
            "Analyse this Jira issue summary and identify "
            "the main problem, blockers, and next actions.\n\n"
            f"Source: {JIRA_ISSUE_URL}\n\n"
            f"Summary:\n{summary}"
        )
    )
    print(result.messages[-1].content)
    await model_client.close()


if __name__ == "__main__":
    asyncio.run(main())
```

## Output

| Jira API raw output | EnConvert Distill output |
| --- | --- |
| Structured JSON with nested fields | Clean text summary, single field |
| Atlassian Document Format markup in description bodies | Markup stripped, prose only |
| Comment threads as separate paginated objects | Comments consolidated into summary where relevant |
| Attachment metadata with no content | Attachment content included if accessible |
| Requires parsing, flattening, and normalisation | Ready to pass directly into agent context |

AutoGen agents that need to reason over Jira content do not need custom parsing logic when EnConvert Distill is in the pipeline. Any Jira issue URL becomes an LLM-ready summary in one API call, with the same output structure regardless of ticket type, project, or schema variation. The agent receives clean text and can act on it immediately.

## Get started

[Get free API key — 500 ops per month, no card required.](https://www.enconvert.com/auth?mode=signup)

## Related solutions

- [How to Summarise Notion Pages with Claude Code](https://www.enconvert.com/solutions/summarise-notion-pages-in-claude-code-enconvert-api.md)
- [How to Summarise Medium Articles with AutoGen](https://www.enconvert.com/solutions/summarise-medium-articles-with-autogen-enconvert-api.md)
- [How to Summarise Substack Newsletters with LangChain](https://www.enconvert.com/solutions/summarise-substack-newsletters-with-langchain-enconvert.md)
- [How to Summarise Wikipedia Articles with LlamaIndex](https://www.enconvert.com/solutions/summarise-wikipedia-articles-with-llamaindex-enconvert-api.md)
- [Best Firecrawl Alternative for RAG Pipeline Ingestion](https://www.enconvert.com/solutions/best-firecrawl-alternative-enconvert-api.md)
- [How to Scrape Stripe Docs with OpenAI Agents SDK](https://www.enconvert.com/solutions/scrape-stripe-docs-with-openai-agents-sdk-enconvert-api.md)
