diff --git a/README.md b/README.md
index 6a6bdb533a023458f8ece3c0dbc1a0127cac75e3..39f7d32c8d48e9cd38ef0343bc9a8335a14809da 100644
--- a/README.md
+++ b/README.md
@@ -91,6 +91,7 @@ Settings pro appky na weby:
 | --- | --- | --- |
 | `DONATE_PORTAL_REDIRECT_URL` | "" | URL pro přesměrování z darovacího formuláře |
 | `DONATE_PORTAL_REDIRECT_SOURCE` | dary.pirati.cz | identifikátor zdroje pro přesměrování na darovací portál |
+| `DONATE_PORTAL_API_URL` | "" | URL s API darovacího portálu |
 
 ### Management commands
 
diff --git a/donate/migrations/0008_auto_20200826_0021.py b/donate/migrations/0008_auto_20200826_0021.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ef77b85c62269f23df5e4a8b3c36666e49c6d55
--- /dev/null
+++ b/donate/migrations/0008_auto_20200826_0021.py
@@ -0,0 +1,27 @@
+# Generated by Django 3.0.8 on 2020-08-25 22:21
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("donate", "0007_auto_20200724_1658"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="donateprojectpage",
+            name="donated_amount",
+            field=models.IntegerField(
+                blank=True, null=True, verbose_name="vybraná částka"
+            ),
+        ),
+        migrations.AddField(
+            model_name="donateprojectpage",
+            name="expected_amount",
+            field=models.IntegerField(
+                blank=True, null=True, verbose_name="očekávaná částka"
+            ),
+        ),
+    ]
diff --git a/donate/models.py b/donate/models.py
index 7313d891482508f93489333ec9ba9983c1a3443e..6fd35769ac10786147b0641245dc8960d9abae5c 100644
--- a/donate/models.py
+++ b/donate/models.py
@@ -1,3 +1,4 @@
+from django.core.cache import cache
 from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
 from django.db import models
 from django.shortcuts import redirect
@@ -18,6 +19,7 @@ from wagtailmetadata.models import MetadataPageMixin
 from tuning import help
 
 from .forms import DonateForm
+from .utils import get_donated_amount_from_api
 
 
 class SubpageMixin:
@@ -361,6 +363,8 @@ class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin):
         verbose_name="galerie fotek",
         blank=True,
     )
+    expected_amount = models.IntegerField("očekávaná částka", blank=True, null=True)
+    donated_amount = models.IntegerField("vybraná částka", blank=True, null=True)
     # we will use photo as search image
     search_image = None
 
@@ -372,6 +376,7 @@ class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin):
             "info do přehledu projektů",
         ),
         FieldPanel("date"),
+        FieldPanel("expected_amount"),
         FieldPanel("body", classname="full"),
         StreamFieldPanel("gallery"),
     ]
@@ -395,7 +400,9 @@ class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin):
         ),
     ]
 
-    settings_panels = Page.settings_panels + [FieldPanel("portal_project_id")]
+    settings_panels = Page.settings_panels + [
+        FieldPanel("portal_project_id"),
+    ]
 
     ### RELATIONS
 
@@ -420,6 +427,25 @@ class DonateProjectPage(DonateFormMixin, Page, SubpageMixin, MetadataPageMixin):
             return str(self.perex)[:150] + "..."
         return self.perex
 
+    def get_donated_amount(self):
+        key = f"donated_amount_{self.portal_project_id}"
+        amount = cache.get(key)
+        if amount is None:
+            amount = get_donated_amount_from_api(self.portal_project_id)
+            if amount is not None:
+                self.donated_amount = amount
+                self.save()
+                cache.set(key, amount)
+        return self.donated_amount
+
+    @property
+    def donated_percentage(self):
+        if not self.expected_amount:
+            return 0
+        if self.get_donated_amount() >= self.expected_amount:
+            return 100
+        return round(self.get_donated_amount() / self.expected_amount * 100)
+
     def get_context(self, request):
         context = super().get_context(request)
         context["other_projects"] = (
diff --git a/donate/templates/donate/donate_project_page.html b/donate/templates/donate/donate_project_page.html
index 2338358b708d6bd834de751e75b73c73471295a6..b6e88d854230000b3920e6f6ab562ee793dd5d8e 100644
--- a/donate/templates/donate/donate_project_page.html
+++ b/donate/templates/donate/donate_project_page.html
@@ -1,5 +1,5 @@
 {% extends "donate/base.html" %}
-{% load static wagtailcore_tags wagtailimages_tags %}
+{% load static wagtailcore_tags wagtailimages_tags humanize %}
 
 {% block content %}
 
@@ -57,16 +57,21 @@
               </div><!-- /project-donate-form__left -->
 
               <div class="project-donate-form__right">
-                {% comment %} {# TODO #}
-                <h5>Vybráno <strong>4 963 Kč</strong> z <strong>250 000 Kč</strong></h5>
+                {% if page.expected_amount %}
+                <h5>
+                  Vybráno <strong>{{ page.get_donated_amount|intcomma }}&nbsp;Kč</strong>
+                  z <strong>{{ page.expected_amount|intcomma }}&nbsp;Kč</strong>
+                </h5>
                 <div class="progress">
-                  <div class="progress-bar" role="progressbar" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
+                  <div class="progress-bar" role="progressbar" style="width: {{ page.donated_percentage }}%" aria-valuenow="{{ page.donated_percentage }}" aria-valuemin="0" aria-valuemax="100"></div>
                 </div>
                 <hr>
+                {% comment %}
                 <h5><strong>24 lidí</strong> přispělo</h5>
                 <h5><strong>40 dní</strong> do konce</h5>
                 <hr>
                 {% endcomment %}
+                {% endif %}
 
                 {% if page.show_donate_form %}
                 <form id="js-donate-form" method="post">
diff --git a/donate/templates/donate/project_snippet.html b/donate/templates/donate/project_snippet.html
index 91806e5556dc9fff236b40bc0f24cd557de4c5e6..c2e3c90dbc00337f78d8e27f287ce96916d18177 100644
--- a/donate/templates/donate/project_snippet.html
+++ b/donate/templates/donate/project_snippet.html
@@ -1,4 +1,4 @@
-{% load wagtailcore_tags wagtailimages_tags %}
+{% load wagtailcore_tags wagtailimages_tags humanize %}
 
 <div class="col-12 col-md-4 mb-4">
   <a class="card project" href="{% pageurl project %}">
@@ -8,14 +8,17 @@
       <h5>{{ project.title }}</h5>
       <p>{{ project.perex }}</p>
     </div>
-    {% comment %} {# TODO #}
+    {% if project.expected_amount %}
     <div class="card-footer">
       <div class="progress">
-        <div class="progress-bar" role="progressbar" style="width: 90%" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100"></div>
+        <div class="progress-bar" role="progressbar" style="width: {{ project.donated_percentage }}%" aria-valuenow="{{ project.donated_percentage }}" aria-valuemin="0" aria-valuemax="100"></div>
       </div>
-      <p>Vybráno <strong>4 963 Kč</strong> z <strong>250 000 Kč</strong></p>
+      <p>
+        Vybráno <strong>{{ project.get_donated_amount|intcomma }}&nbsp;Kč</strong>
+        z <strong>{{ project.expected_amount|intcomma }}&nbsp;Kč</strong>
+      </p>
     </div>
-    {% endcomment %}
+    {% endif %}
     {% if project.is_new %}
     <ul class="project__flags">
       <li class="project__flag new">Nový projekt</li>
diff --git a/donate/utils.py b/donate/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..a83f6a7f447dff00fc35255a0ebe40ded4ecfd60
--- /dev/null
+++ b/donate/utils.py
@@ -0,0 +1,28 @@
+import logging
+import os.path
+
+import requests
+from django.conf import settings
+
+logger = logging.getLogger(__name__)
+
+
+def get_donated_amount_from_api(portal_project_id):
+    url = os.path.join(
+        settings.DONATE_PORTAL_API_URL, "donate/bar", str(portal_project_id)
+    )
+
+    try:
+        response = requests.get(url, timeout=settings.DONATE_PORTAL_API_TIMEOUT)
+        response.raise_for_status()
+        _, amount = response.json()
+        return amount
+
+    except requests.exceptions.Timeout:
+        logger.warning("Donate portal API call timed out for %s", url)
+
+    except requests.exceptions.RequestException:
+        logger.warning("Donate portal API call failed for %s", url)
+        raise
+
+    return None
diff --git a/majak/settings/base.py b/majak/settings/base.py
index 24035e1f7cd0e60079540d11d12430426b3d969c..55eb023477bd04710a30e27c1c032fa114b38dbf 100644
--- a/majak/settings/base.py
+++ b/majak/settings/base.py
@@ -66,6 +66,7 @@ INSTALLED_APPS = [
     "django.contrib.sessions",
     "django.contrib.messages",
     "django.contrib.staticfiles",
+    "django.contrib.humanize",
 ]
 
 # AUTHENTICATION
@@ -218,3 +219,5 @@ DONATE_PORTAL_REDIRECT_URL = env.str("DONATE_PORTAL_REDIRECT_URL", default="")
 DONATE_PORTAL_REDIRECT_SOURCE = env.str(
     "DONATE_PORTAL_REDIRECT_SOURCE", default="dary.pirati.cz"
 )
+DONATE_PORTAL_API_URL = env.str("DONATE_PORTAL_API_URL", default="")
+DONATE_PORTAL_API_TIMEOUT = 5