diff --git a/packages/flamenco/flamenco/exceptions.py b/packages/flamenco/flamenco/exceptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e88b11761bfc689fc03c2ae66e12fd668e63794
--- /dev/null
+++ b/packages/flamenco/flamenco/exceptions.py
@@ -0,0 +1,9 @@
+"""Flamenco-specific exceptions."""
+
+
+class FlamencoException(Exception):
+    """Base exception for all Flamenco-specific exceptions."""
+
+
+class JobSettingError(FlamencoException):
+    """Raised when a job's settings contains errors."""
diff --git a/packages/flamenco/flamenco/job_compilers/abstract_compiler.py b/packages/flamenco/flamenco/job_compilers/abstract_compiler.py
index 1215b083b7eb9b3c8194641c7c16354d11d5f8f5..42326ccf157a0e49e171e77b06ca2b6e620f34d6 100644
--- a/packages/flamenco/flamenco/job_compilers/abstract_compiler.py
+++ b/packages/flamenco/flamenco/job_compilers/abstract_compiler.py
@@ -7,9 +7,32 @@ class AbstractJobCompiler(object):
     task_manager = attr.ib(cmp=False, hash=False)
     _log = attrs_extra.log('%s.AbstractJobType' % __name__)
 
+    REQUIRED_SETTINGS = []
+
     def compile(self, job):
         """Compiles the job into a list of tasks.
 
         Calls self.task_manager.create_task(...) to create the task in the database.
         """
         raise NotImplementedError()
+
+    def validate_job_settings(self, job):
+        """Raises an exception if required settings are missing.
+
+        :raises: flamenco.exceptions.JobSettingError
+        """
+        from pillarsdk import Resource
+
+        job_settings = job['settings']
+        if isinstance(job_settings, Resource):
+            job_settings = job_settings.to_dict()
+
+        missing = [key for key in self.REQUIRED_SETTINGS
+                   if key not in job_settings]
+
+        if not missing:
+            return
+
+        from flamenco import exceptions
+        raise exceptions.JobSettingError(
+            u'Job %s is missing required settings: %s' % (job[u'_id'], u', '.join(missing)))
diff --git a/packages/flamenco/flamenco/job_compilers/blender_render.py b/packages/flamenco/flamenco/job_compilers/blender_render.py
index 65a464d4da5340a1500bf3a8151163dabfddbb82..ffc34468d9c5d70c00e52541151d714f6d2860e6 100644
--- a/packages/flamenco/flamenco/job_compilers/blender_render.py
+++ b/packages/flamenco/flamenco/job_compilers/blender_render.py
@@ -1,3 +1,5 @@
+from pillar import attrs_extra
+
 from .abstract_compiler import AbstractJobCompiler
 from . import commands, register_compiler
 
@@ -5,9 +7,13 @@ from . import commands, register_compiler
 @register_compiler('blender-render')
 class BlenderRender(AbstractJobCompiler):
     """Basic Blender render job."""
+    _log = attrs_extra.log('%s.BlenderRender' % __name__)
+
+    REQUIRED_SETTINGS = ('blender_cmd', 'filepath', 'render_output', 'frames', 'chunk_size')
 
     def compile(self, job):
         self._log.info('Compiling job %s', job['_id'])
+        self.validate_job_settings(job)
 
         move_existing_task_id = self._make_move_out_of_way_task(job)
         task_count = 1 + self._make_render_tasks(job, move_existing_task_id)