diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
index c108ca0..2b35e50 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
@@ -19,11 +19,14 @@
 import com.google.common.base.Charsets;
 import com.google.gerrit.common.errors.NoSuchAccountException;
 import com.google.gerrit.extensions.annotations.PluginData;
+import com.google.gerrit.extensions.common.ProjectInfo;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.OutputFormat;
 import com.google.gerrit.server.project.NoSuchChangeException;
+import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectState;
 import com.google.gerrit.server.validators.ValidationException;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
@@ -53,6 +56,7 @@
         @Assisted StringBuffer result);
   }
 
+  private final ProjectCache projectCache;
   private final OpenRepositoryStep openRepoStep;
   private final ConfigureRepositoryStep configRepoStep;
   private final GitFetchStep gitFetchStep;
@@ -68,7 +72,9 @@
   private LockFile lockFile;
 
   @Inject
-  ImportProjectTask(OpenRepositoryStep openRepoStep,
+  ImportProjectTask(
+      ProjectCache projectCache,
+      OpenRepositoryStep openRepoStep,
       ConfigureRepositoryStep configRepoStep,
       GitFetchStep gitFetchStep,
       ReplayChangesStep.Factory replayChangesFactory,
@@ -78,6 +84,7 @@
       @Assisted("user") String user,
       @Assisted("password") String password,
       @Assisted StringBuffer messages) {
+    this.projectCache = projectCache;
     this.openRepoStep = openRepoStep;
     this.configRepoStep = configRepoStep;
     this.gitFetchStep = gitFetchStep;
@@ -99,6 +106,12 @@
     }
 
     try {
+      checkPreconditions();
+    } catch (IOException | ValidationException e) {
+      handleError(e);
+    }
+
+    try {
       Repository repo = openRepoStep.open(name, messages);
       if (repo == null) {
         return;
@@ -128,6 +141,16 @@
     }
   }
 
+  private void checkPreconditions() throws IOException, ValidationException {
+    ProjectInfo p =
+        new RemoteApi(fromGerrit, user, password).getProject(name.get());
+    ProjectState parent = projectCache.get(new Project.NameKey(p.parent));
+    if (parent == null) {
+      throw new ValidationException(format(
+          "Parent project %s does not exist in target,", p.parent));
+    }
+  }
+
   static class Params {
     String from;
     String user;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
index 89d37d4..1125601 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
@@ -18,6 +18,7 @@
 import com.google.gerrit.extensions.client.ListChangesOption;
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.extensions.common.CommentInfo;
+import com.google.gerrit.extensions.common.ProjectInfo;
 import com.google.gerrit.extensions.common.RevisionInfo;
 import com.google.gerrit.server.OutputFormat;
 import com.google.gson.Gson;
@@ -35,6 +36,14 @@
     restSession = new RestSession(url, user, pass);
   }
 
+  public ProjectInfo getProject(String projectName) throws IOException {
+    String endPoint = "/projects/" + projectName;
+    RestResponse r = restSession.get(endPoint);
+    assertOK(r);
+    return newGson().fromJson(r.getReader(),
+        new TypeToken<ProjectInfo>() {}.getType());
+  }
+
   public List<ChangeInfo> queryChanges(String projectName) throws IOException {
     String endPoint =
         "/changes/?q=project:" + projectName +
